使用.instance_of()时是否需要嵌套的“if”循环?

时间:2014-01-23 23:48:01

标签: ruby

来自:CodeQuizzes #6, problem #2

result = []
weird_array = ["blah", :meow, 42, 90, :building]

迭代weird_array的每个元素,如果元素是:符号(即Symbol类的实例),则将元素添加到结果数组中。

建议的解决方案:

weird_array.each do |element|
  if element.instance_of?(Symbol)
    result.push(element)
  end
end

但是,由于#instance_of?返回一个布尔值,这也不会起作用吗?:

weird_array.each do |x|
  result << x.instance_of?(Symbol)
end

(我在 IRB 中运行了两个并找到了类似的答案,但只想与专家仔细核对。)

2 个答案:

答案 0 :(得分:4)

,这会将truefalse添加到result数组,而不是对象x本身。这不是练习所要求的。

这会有效:

weird_array.each do |x|
  result << x if x.instance_of?(Symbol)
end

答案 1 :(得分:0)

或者,您可以使用if隐式select

result = weird_array.select { |x| x.instance_of? Symbol }