2012-03-26 2 views
0

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

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

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

«n.name =» и «n.name =» оба работают.

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

Защиту GetName КОНЕЦ

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

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

благодарит заранее.

ответ

3

Сетчаты специальные в Ruby.

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

от http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html

Задания определены в Ruby, как:

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

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

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

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

1

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

+0

, но в setter, = это часть имени метода. не так ли? – HungryCoder

+0

В Ruby имена переменных и методов должны быть в нижнем регистре, а слова должны быть разделены символами подчеркивания. Использование верблюжьего корпуса сильно обескуражено, за исключением имен классов. –

Смежные вопросы