0

在做本页底部的练习时,

我得到了您在下面看到的解决方案的帮助:

让我继续烦恼的是第 4 行。似乎它甚至在开始写入屏幕block.call之前就已全部运行。puts

这只是对 Ruby 的接受吗?如果我要尝试查找它,我什至将这种行为称为什么?

def log(desc, &block)
  puts "Beginning #{desc}..."
  #block.call seems to be occurring here!
  puts "... #{desc} finished, returning: #{block.call}"
end

someLittle = lambda {5}

yetAnother = lambda {'I like Thai food!'}

outer = lambda do
  log "some little block", &someLittle
  log "yet another block", &yetAnother
  false
end

log "outer block", &outer
4

1 回答 1

0

让我们考虑以下示例:

greeting = "Howdy!"
puts "#{greeting} What's up?"

在这里,您greeting在传递给 RubyKernel#puts方法的字符串中插入变量。因此greeting需要先定义和评估,然后再对其进行插值(或进行任何其他操作,例如连接等)。

你明白吗?

现在让我们看看你的例子:

puts "... #{desc} finished, returning: #{block.call}"

也在这里,desc需要block.call先解释,然后再将其插入字符串中。

如何将此行为与其他语言进行比较:http ://en.wikipedia.org/wiki/String_interpolation

于 2013-10-28T06:38:16.280 回答