我有以下简化的代码示例:
class MyTimerClass
def timed_execution(&block)
...
end
def elapsed_time
...
return ...
end
end
...
t = MyTimerClass.new
t.timed_execution {1000.times {"foo".equal? "foo"}}
puts "block took #{t.elapsed_time} seconds to run."
我想要做的是打印"执行"每次执行"foo".equal? "foo"
时。我没有将它放在timed_execution
方法中,而是将其添加到传递的代码块中。类似......
t.timed_execution {1000.times {"foo".equal? "foo" puts "executed"}}
这是错误的。我想我真正想知道的是如何在代码块中包含多个语句。我知道真的很简单的问题......
答案 0 :(得分:3)
您可以使用do
.. end
代替大括号。或者你甚至可以用分号分隔语句。
t.timed_execution do
1000.times do
"foo".equal? "foo"
puts "executed"
end
end
或强>
t.timed_execution { 1000.times { "foo".equal? "foo" ; puts "executed" } }
答案 1 :(得分:0)
从这个问题来看,似乎你认为Ruby中的代码块应该写在一行上。实际上,Ruby中的代码块可以跨越多行。
Ruby中的代码块是通过在开头内写入语句来创建的。{'和结尾'}'或者是一个开头的“做”。结束'结束'块的参数与块开头位于同一行。示例:
# Using 'do' and 'end'.
5.times do |i|
puts i
end
# Using '{' and '}'.
5.times { |i|
puts i
}
如果要在块中包含多个语句,则首选编写代码块的方法。如果你确定你只需要一个声明,那么你也可以选择遵循一种线条样式(我认为很多人,我自己亲自为一个声明而去寻找这个)。示例:
# Using a single line.
5.times { |i| puts i }
允许在分号的帮助下将多个语句放在单个行块中以分隔语句,也可以在单个语句中使用多行块。但是,为了更好的可读性,最好不要使用前者。
另外从我的观点来看,使用' {'和'}'对于单行块和'做'并且'结束'用于多行块。