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