Как определить метод в одной строке в Ruby?

Является ли def greet; puts "hello"; end единственным способом определения метода в одной строке в 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

Из bbatsov/ruby-style-guide.

Ответ 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