Как определить метод в одной строке в Ruby? - PullRequest
83 голосов
/ 29 ноября 2010

Является ли def greet; puts "hello"; end единственным способом определения метода в одной строке в Ruby?

Ответы [ 5 ]

90 голосов
/ 29 ноября 2010

Вы можете избежать необходимости использовать точки с запятой, если используете скобки:

def hello() :hello end
67 голосов
/ 20 мая 2013

Просто дайте полный свежий ответ:

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

# bad
def too_much; something; something_else; end

# okish - notice that the first ; is required
def no_braces_method; body end

# okish - notice that the second ; is optional
def no_braces_method; body; end

# okish - valid syntax, but no ; make it kind of hard to read
def some_method() body end

# good
def some_method
  body
end

Единственным исключением из правила являются методы с пустым телом.

# good
def no_op; end

Из bbatsov / ruby-style-guide .

39 голосов
/ 29 ноября 2010
def add a,b; a+b end

Точка с запятой - это встроенный терминатор операторов для Ruby

Или вы можете использовать метод define_method. (Редактировать: Это устарело в ruby ​​1.9)

define_method(:add) {|a,b| a+b }
9 голосов
/ 29 ноября 2010

Другой способ:

define_method(:greet) { puts 'hello' }

Может использоваться, если вы не хотите вводить новую область видимости для метода при его определении.

6 голосов
/ 03 мая 2013

Еще один способ:

def greet() return 'Hello' end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...