课后声明的分号

时间:2018-10-09 10:49:47

标签: ruby syntax

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

2 个答案:

答案 0 :(得分:2)

  

请解释一下,为什么可以在这里使用分号以及';'的作用是什么?在这些情况下

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

以下是所有有效选项:

class Dog
end

class Dog;
end

class Dog; end

以下内容无效(红宝石> = 2.3,这似乎很好)

class Dog end

对于带有空主体的类或方法定义,使用单行和分号分隔符在红宝石中是惯用的。如果您有身体,通常会省略分号并将内容放在新行上。

  

UPD:我认为

Java的语法解析器没有ruby的解析器那么灵活。 Java中的类或方法定义是严格的语法,在类名之后和定义主体之前需要换行符。

答案 1 :(得分:2)

就像Java和C一样,您可以使用;终止语句。但是,仅当您在同一行上放置多个语句时才需要这样做。根据ruby约定,在所有其他情况下,您都应省略写;

例如。

[1, 2, 3].each { |num| incremented = num + 1; puts incremented }是有效的ruby语句。

类似地,您可以使用相同的概念在ruby中创建类和方法。

class Abc; end =>将创建一个名为Abc

的类

def abc; end =>将创建名为abc

的方法

以上所有示例都是有效的ruby语句。