Ruby - встроенное объявление приватных методов - PullRequest
1 голос
/ 06 декабря 2011

В настоящее время пишется класс, в котором методы, которые я рассматриваю как закрытые, распределены по всему коду. Вместо добавления строки private и вставки копий всего, что находится под ней, я хочу сделать встроенное объявление в верхней части класса, например private :foo, :bar.

Однако всякий раз, когда я пытаюсь объявить метод с параметрами как private inline, я получаю сообщение об ошибке. Например, если у меня есть метод foo(bar, baz), и я пытаюсь объявить его закрытым с private :foo(bar, baz), я получаю сообщения об ошибках в двух скобках, ожидая взамен kEND и =.

Если я пытаюсь объявить это с помощью private :foo, мне говорят, что в моем коде нет такого метода, как foo.

Как я могу делать то, что пытаюсь сделать, не получая этих ошибок?

1 Ответ

9 голосов
/ 06 декабря 2011

TL;DR private :foo должен появиться после метод определен.

private аргумент должен быть символом (например, :foo), не вызов (например, foo(bar, baz)) 1 .

Объявления классов Ruby - это просто код: операторы выполняются в порядке их написания.Вызов private :foo проверяет класс на наличие foo метода.Если он еще не определен, это ошибка.


Обновлено для более новых Ruby

Ключевое слово def теперь возвращаетсимвол определяемого метода , позволяющий:

private def foo; ... ; end

1 Если это не вызов метода класса, возвращающий символ метода, крайний регистр.

...