ruby - 类声明后的分号
问题描述
我认为Ruby代码:
class ClassName ..some methods.. end
与Java代码相同:
class ClassName { ..some methods.. }
如果我用 Java 编写:
class ClassName; { ..some methods.. }
或者:
class ClassName { ; ..some methods.. }
它引发了一个错误。因此,我期望 Ruby 代码:
class Dog; end
会引发类似的异常unexpected symbol ';'
。但是,Ruby 代码可以工作。请解释为什么可以在这里使用分号,以及;
在这种情况下的含义。
解决方案
请解释一下为什么可以在这里使用分号以及';'是什么意思 在这种情况下意味着
分号在 ruby 中是可选的。这意味着使用它们实际上是有效的语法。有一个换行符就足以让解析器分隔语句。如果您提到分号是必需的,因为没有换行符作为语句分隔符。
以下都是有效的选项:
class Dog
end
class Dog;
end
class Dog; end
以下是无效的(虽然 ruby >= 2.3 这似乎没问题)
class Dog end
对于具有空主体的类或方法定义,使用带有分号分隔符的一行在 ruby 中是惯用的。如果您有正文,您通常会省略分号并将内容放在新行上。
UPD:我想,那个
Java 的语法解析器不像 ruby 的解析器那样灵活。Java 中的类或方法定义是严格的语法,它要求在类名之后和定义主体之前有一个换行符。
推荐阅读
- r - PCA中输入变量与主成分之间的关系
- python - 难以将嵌套字典的元素从数组更改为列表
- c# - 在 .NET 的两个实例中打开同一个文件
- c# - 迁移 EF Core 中的排序列
- node.js - 在 node.js 中同步获取 mysql 查询的输出
- lisp - 如何在 Lisp 中编写函数。编译那个 Lisp 文件。然后运行那个 Lisp 程序
- google-bigquery - 为什么来自流缓冲区的查询不计费
- typescript - 使用 typescript 对 v5 进行续集,model.d.ts 文件的预期类型
- dart - 检查列表是否包含飞镖中对象的属性
- ios - SceneKit - 几何穿透