正如标题所说,我对语句后面的代码块和"正常"代码块之间的区别感到困惑.

我通常在Ruby中用do...end,例如.

while true do
  # ...
end

但是它是一个街区吗?如果是,为什么?如果没有,为什么它被声明为我们用方法声明的块?

推荐答案

while不是一种方法,而是一种keyword.这允许它有自己的语法(例如,使do可选)和判断规则.

while回路的主体不是块.块被发送到方法,while不是方法.不能将块参数传递给while(如while(true, &block)中所示),也不能引用while循环的主体或将其传递.它也不像块那样创建新的变量范围.

为什么它被声明为我们用方法声明块?

我想这是出于方便.如果已经有doend,为什么要使用不同的语法?对类似的构造(while循环体、块体、方法体等)重新使用相同的语法,可以更容易地读写代码.

Ruby相关问答推荐

使用 RSpec 测试嵌套哈希时随机排序数组的匹配

Ruby - 使用索引值识别和更新数组中的重复项

用函数组合枚举器的Ruby方法

.nil?、.blank? 之间的区别?和.empty?

Ruby 将字符串转换为方法名

需要Ruby

带有索引的 Ruby `each_with_object`

Ruby 对象打印为指针

Scala 的扩展性是否优于其他 JVM 语言?

确保如何在 ruby​​ 中工作

符号到字符串问题

Ruby 'require' 语句是在类定义的内部还是外部?

Ruby中的常量或类变量?

rspec 是否有比 target.should < 6 更具体的东西?

使用 Ruby 将大写字符串转换为标题大小写

Ruby NOT Rails 中有复数函数吗?

判断 Ruby 中是否存在 URL

如何在 Ruby 中将类构造函数设为私有?

找不到Bundle 命令 mac

不能在windows上安装thin