以下是代码:
def count_ones(number, num_bits)
(0...num_bits).inject(0) { |total, shift| total + (number >> shift & 1) }
end
puts (0...gets.to_i).map do
start, finish = gets.split.map(&:to_i)
(start..finish).inject(0) { |total, number| total + count_ones(number, 32) }
end
如果输入3,我希望能再输入3次。相反,它打印出一个可枚举的对象..
但是..如果我这样做,并输入3:
puts (0...gets.to_i).map { |i| i }
我得到了我期待的结果: 0 1 2
我怎样才能将这些矛盾的行为与其中一种相协调?
答案 0 :(得分:0)
对于任何想知道的人,我都明白了:它实际上是使用do / end而不是花括号。此代码实际上评估并打印块我期望它:
def count_ones(number, num_bits)
(0...num_bits).inject(0) { |total, shift| total + (number >> shift & 1) }
end
puts (0...gets.to_i).map {
start, finish = gets.split.map(&:to_i)
(start..finish).inject(0) { |total, number| total + count_ones(number, 32) }
}
非常有趣,因为直到现在我才认为花括号和do / end在语义上是等价的。