Czy def greet; puts "hello"; endjest jedynym sposobem zdefiniowania metody w jednym wierszu w Rubim?
Czy def greet; puts "hello"; endjest jedynym sposobem zdefiniowania metody w jednym wierszu w Rubim?
Odpowiedzi:
Możesz uniknąć konieczności używania średników, jeśli używasz nawiasów:
def hello() :hello end
Po prostu podaj pełną, świeżą odpowiedź:
Generalnie unikaj metod jednokreskowych. Chociaż są dość popularne w środowisku naturalnym, istnieje kilka cech charakterystycznych ich składni definicji, które sprawiają, że ich użycie jest niepożądane. W każdym razie - w metodzie jednowierszowej nie powinno być więcej niż jedno wyrażenie .
# 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
Jedynym wyjątkiem od reguły są metody z pustym treścią.
# good
def no_op; end
def add a,b; a+b end
Średnik to terminator instrukcji wbudowanej dla Rubiego
Lub możesz użyć define_methodmetody. (Edycja: ten jest przestarzały w Ruby 1.9)
define_method(:add) {|a,b| a+b }
Inny sposób:
define_method(:greet) { puts 'hello' }
Może być użyty, jeśli nie chcesz wprowadzać nowego zakresu dla metody podczas jej definiowania.
define_methodzostał "sprywatyzowany" w Ruby 1.9
Jeszcze inny sposób:
def greet() return 'Hello' end
returntutaj, ponieważ nie jest to klauzula ochronna.