Почему методы в документации Ruby предшествовавшие знаком хеша?

Когда я вижу любой метод Ruby, распечатанный в тексте, это обычно появляется как:

Class#method

или

#method

Теперь, я использовал бы:

Class.method

Почему всем методам Ruby предшествует знак фунта? Есть ли какая-либо причина его?

56
задан double-beep 26 October 2019 в 11:30
поделиться

5 ответов

Из документов rdoc (выделено мной):

Имена классов, исходных файлов и любые имена методов, содержащие подчеркивание или предшествует хеш символ автоматически гиперссылка с комментария к их описание.

16
ответ дан double-beep 26 November 2019 в 17:03
поделиться

Обозначение # используется для обозначения канонический метод экземпляра , такой как String # upcase . . нотация используется для ссылки на метод конкретного экземпляра, например mystring.upcase . Различие сделано для того, чтобы не подразумевать, что метод класса «upcase» существует.

28
ответ дан dstnbrkr 26 November 2019 в 17:03
поделиться

Все приведенные выше ответы верны. Единственное, что я хотел бы добавить, это то, что стиль документации, который вы сказали, что вы бы предпочли

Class.method

, будет легко спутать с методами класса. Поскольку вы можете вызывать методы класса в ruby, используя приведенный выше синтаксис:

class Foo
  def self.say_hi
    puts "hi"
  end
end

Foo.say_hi    # => prints "hi"
7
ответ дан 26 November 2019 в 17:03
поделиться

Обратите внимание, что соглашение:

Class#method

, а не

object#method

В коде у вас будет object.method , если объект был экземпляром класса . Соглашение # не используется в коде.

Из документации RDoc :

Use :: для описания методов класса, # для описания методов экземпляра и использования. например, код.

101
ответ дан 26 November 2019 в 17:03
поделиться

Я только что понял, что ни один из других ответов не затрагивает самый тривиальный аспект вопроса: почему знак # ?

У меня две теории:

  1. Это могло быть из Smalltalk, где символы записываются #sym (вместо : sym ), как в Ruby. Итак, если вы хотите сослаться на объект Method (в отличие от вызова метода), тогда вы должны вызвать что-то вроде Array >> #new. ( >> сам по себе является методом, возвращающим переданный ему метод. Так, в Ruby это будет Array.method: new .) В документации Smalltalk обычно упоминаются методы. как Class >> method , но в Ruby Class: method имело бы больше смысла, за исключением того, что его легко спутать с Class :: method . Поэтому был выбран метод Class # .
  2. Моя другая теория состоит в том, что он был выбран просто потому, что # является символом комментария в Ruby.

Окончательный ответ может быть только дано тем, кто изобрел эту конвенцию. Если бы он был изобретен для книги Programming Ruby , то это были бы либо Дэйв Томас, либо Энди Хант, но я как бы в этом сомневаюсь. Книга вышла в 2001 году, Ruby - в 1993, как они относились к методам до этого?

Окончательный ответ может дать только тот, кто придумал это соглашение. Если бы он был изобретен для книги Programming Ruby , то это были бы либо Дэйв Томас, либо Энди Хант, но я как бы в этом сомневаюсь. Книга вышла в 2001 году, Ruby - в 1993, как они относились к методам до этого?

Окончательный ответ может дать только тот, кто придумал это соглашение. Если бы он был изобретен для книги Programming Ruby , то это были бы либо Дэйв Томас, либо Энди Хант, но я как бы в этом сомневаюсь. Книга вышла в 2001 году, Ruby - в 1993, как они относились к методам до этого?

19
ответ дан 26 November 2019 в 17:03
поделиться