为什么我不能在ruby中打印可枚举方法的结果

时间:2013-07-10 07:36:30

标签: ruby

以下是代码:

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

我怎样才能将这些矛盾的行为与其中一种相协调?

1 个答案:

答案 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在语义上是等价的。