来自: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 中运行了两个并找到了类似的答案,但只想与专家仔细核对。)
答案 0 :(得分:4)
否,这会将true
或false
添加到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 }