путать с методами доступа Ruby - PullRequest
0 голосов
/ 26 марта 2012

Я действительно запутался, как называть имена методов в классах Ruby.если я создаю метод доступа, например: attr_accessor: name

, он создает методы: name и name =

, но когда я вызываю второй метод с пробелом между 'name' и '='это работает

'n.name =' и 'n.name =' оба работают.

Я где-то читал, что Руби игнорирует пробелы.Итак, почему метод, написанный мной, не работает, когда я вызываю его с пробелами?

def getname end

, если я вызываю этот путь, он не работает.Зачем?t.get name

Я не удивлен, так как он не работает.но я запутался, как метод setter (name =) работает тогда?

спасибо заранее.

Ответы [ 2 ]

3 голосов
/ 26 марта 2012

Сеттеры являются особенными в Ruby.

Фактически, определение имени метода, заканчивающегося знаком равенства, делает это имя правомочным для появления в левой части назначения.

из http://www.ruby -doc.org / docs / ProgrammingRuby / html / tut_classes.html

Назначения в Ruby определены как:

Оператор присваивания устанавливает переменную или атрибут с левой стороны (значение l), чтобы ссылаться на значение справа (значение r).

из http://www.ruby -doc.org/docs/ProgrammingRuby/html/tut_expressions.html

Итак, n.name= напрямую вызывает установщик name=.

n.name = использует эту специальную обработку сеттеровфакт, что он заканчивается на =, чтобы сделать его таким, чтобы вы могли использовать его как lvalue (то есть, оно может появиться на левой стороне) в назначении.

1 голос
/ 26 марта 2012

getName - это имя метода, поэтому в нем нельзя использовать пробелы, потому что тогда он думает, что это два метода или может быть параметром, поэтому мы можем сделать его читабельным.Но знак равенства является операндом, и вокруг него может быть место.Это так же, как сказать «2 + 2» и «2 + 2».Надеюсь, это поможет

...