我有两个文件init.rb
和airport.rb
。
我如何计算与该值匹配的商品数量?
init.rb:
airport1.airplanes_count { |a| a.aircraft_type == "Boeing 747" }
airport.rb:
def airplanes_count
@airplanes.each { |a| a if yield(a) }
end
如果aircraft_type
=波音747,我需要获得一些飞机:
=> 2
而不是飞机名称
=> #<Airplane:0x0000000155e348>
#<Airplane:0x0000000155e028>"
答案 0 :(得分:1)
Ruby已经在所有枚举器上引入了count
方法(如Hashes,Array,...)。您可以像这样“转发”您的区块:
def airplanes_count(&block)
@airplanes.count(&block)
end
答案 1 :(得分:0)
您的方法应如下所示:
def airplanes_count
@airplanes.count{ |a| a if yield(a) }
end
答案 2 :(得分:0)
有更好的方法可以做到这一点......但是......如果你不想改变太多的代码,你可以将airplanes_count的主体更改为这一行。
def airplanes_count
@airplanes.inject(0) { |count,a| yield(a)? (count + 1) : count }
end
这将为您提供所需的信息。