temp = 98.3
begin
print "Your temperature is " + temp.to_s + " Fahrenheit. "
puts "I think you're okay."
temp += 0.1
end while temp < 98.6
在上面的例子中,开始和结束之间的所有内容都是一个块吗?
我仍然对一个区块感到困惑。
如果你不能把它称为块,你会在开始和结束之间将那段代码称为什么?把它称为块是否可以?
答案 0 :(得分:19)
Block在Ruby中具有特殊含义。 According to Matz,Ruby的创建者,您可以将块视为无名函数 - 通常可以yield
编入,也可以使用参数。
在描述Ruby语法时,您可能会看到以下类型的disamiguation:
begin
... end
(在其他语言中称为块)有时可简称为它是什么,即expression (在Ruby中,它可能反过来包含其他表达式 - 表达式只是具有返回值的东西)。有些参考文献仍将其称为begin/end block
或code block
,这有点混淆了do
... end
或{...}
将始终在Ruby中称为block 例如,仔细阅读the Ruby syntax man page,例如
begin
expression
end
expression
while
expression
loop
block
如需进一步阅读,请参阅:
答案 1 :(得分:9)
begin/end
是严格控制流程,而不是阻止。
begin
puts "hi"
end
# => "hi"
代码立即运行。如果它是一个块,则必须以某种方式调用它以使其中的代码运行,如下例所示:
def a_method; end
a_method { puts "hi" }
# nothing..
def a_method
yield
end
a_method { puts "Hi!" }
# => "Hi!"