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