首页 > 解决方案 > 类声明后的分号

问题描述

我认为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 代码可以工作。请解释为什么可以在这里使用分号,以及;在这种情况下的含义。

标签: rubysyntax

解决方案


请解释一下为什么可以在这里使用分号以及';'是什么意思 在这种情况下意味着

分号在 ruby​​ 中是可选的。这意味着使用它们实际上是有效的语法。有一个换行符就足以让解析器分隔语句。如果您提到分号是必需的,因为没有换行符作为语句分隔符。

以下都是有效的选项:

class Dog
end

class Dog;
end

class Dog; end

以下是无效的(虽然 ruby​​ >= 2.3 这似乎没问题)

class Dog end

对于具有空主体的类或方法定义,使用带有分号分隔符的一行在 ruby​​ 中是惯用的。如果您有正文,您通常会省略分号并将内容放在新行上。

UPD:我想,那个

Java 的语法解析器不像 ruby​​ 的解析器那样灵活。Java 中的类或方法定义是严格的语法,它要求在类名之后和定义主体之前有一个换行符。


推荐阅读