Является ли def greet; puts "hello"; end
единственным способом определения метода в одной строке в Ruby?
Как определить метод в одной строке в Ruby?
Ответ 1
Вы можете избежать необходимости использовать точки с запятой, если вы используете круглые скобки:
def hello() :hello end
Ответ 2
Просто дайте полный свежий ответ:
В общем, избегайте однострочных методов. Хотя они несколько популярны в дикой природе, есть несколько особенностей их синтаксиса определения, которые делают их использование нежелательным. Во всяком случае - должно быть не более одного выражения в однострочном методе.
# 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
Ответ 3
def add a,b; a+b end
Точка с запятой - это строковый оператор terminator для Ruby
Или вы можете использовать метод define_method
. (Изменить: этот устарел в рубине 1.9)
define_method(:add) {|a,b| a+b }
Ответ 4
Другой способ:
define_method(:greet) { puts 'hello' }
Может использоваться, если вы не хотите вводить новую область для метода при ее определении.
Ответ 5
Еще один способ:
def greet() return 'Hello' end