如何在ruby代码块中执行多个语句

时间:2015-02-16 01:42:27

标签: ruby

我有以下简化的代码示例:

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"}}

这是错误的。我想我真正想知道的是如何在代码块中包含多个语句。我知道真的很简单的问题......

2 个答案:

答案 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 }

允许在分号的帮助下将多个语句放在单个行块中以分隔语句,也可以在单个语句中使用多行块。但是,为了更好的可读性,最好不要使用前者。

另外从我的观点来看,使用' {'和'}'对于单行块和'做'并且'结束'用于多行块。