Точка с запятой после объявления класса - PullRequest
0 голосов
/ 09 октября 2018

Я думал, что код 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 голосов
/ 09 октября 2018

Как Java и C, вы можете использовать ; для завершения операторов.Однако это требуется только в том случае, если в одну строку помещено более 1 операторов.В соответствии с соглашением о ruby, вы должны исключить запись ; во всех других случаях.

Например,

[1, 2, 3].each { |num| incremented = num + 1; puts incremented } является допустимым оператором ruby.

Аналогичным образом вы можете использовать ту же концепцию для создания классов и методов в ruby.

class Abc; end => создаст класс с именем Abc

def abc; end => создаст метод с именем abc

Все приведенные выше примеры являются допустимыми операторами ruby.

0 голосов
/ 09 октября 2018

Объясните, пожалуйста, почему здесь можно использовать точку с запятой и что означает ';'означает в этом контексте

Точки с запятой необязательны в ruby.Это означает, что их использование действительно допустимый синтаксис.Наличие новой строки достаточно для парсера для разделения операторов.В случае, если вы упоминаете точку с запятой, требуется, поскольку в качестве разделителя операторов нет новой строки.

Ниже перечислены все допустимые параметры:

class Dog
end

class Dog;
end

class Dog; end

Недопустимо следующее (с ruby>= 2.3 это вроде бы хорошо)

class Dog end

Для определений класса или метода с пустым телом, использующих одну строку с разделителем точки с запятой, идиоматически в ruby.Если у вас есть тело, вы обычно пропускаете точку с запятой и помещаете содержимое в новую строку.

UPD: я думал, что

синтаксический анализатор Java не 'не допускает такой гибкости, как синтаксический анализатор ruby.Определение класса или метода в Java является строгим синтаксисом, который требует новой строки после имени класса и перед телом определения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...