开始吧。 。 。结束而表示'阻止'?

时间:2009-03-13 07:18:26

标签: ruby syntax

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

在上面的例子中,开始和结束之间的所有内容都是一个块吗?

我仍然对一个区块感到困惑。

如果你不能把它称为块,你会在开始和结束之间将那段代码称为什么?把它称为块是否可以?

2 个答案:

答案 0 :(得分:19)

Block在Ruby中具有特殊含义。 According to Matz,Ruby的创建者,您可以将块视为无名函数 - 通常可以yield编入,也可以使用参数。

在描述Ruby语法时,您可能会看到以下类型的disamiguation:

  • begin ... end(在其他语言中称为块)有时可简称为它是什么,即expression (在Ruby中,它可能反过来包含其他表达式 - 表达式只是具有返回值的东西)。有些参考文献仍将其称为begin/end blockcode 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!"