2010-11-29 63 views
67

def greet; puts "hello"; end在Ruby中的一行上定義方法的唯一方法?如何在Ruby中的一行上定義方法?

+10

從答案中可以看出,可以在一行中定義一種方法不同的方法,但問題是,應該如何?爲了維護和可讀性的原因,任何定義都應該以清晰明瞭的方式編寫,因此,如果單行變得笨拙或混亂,然後將其展開。有些語言似乎鼓勵使用簡潔編碼作爲代碼編寫的一種方式,但Ruby編碼風格鼓勵優雅,可讀性和可維護性高於調查。完成前三名,我們將向你鞠躬。 – 2011-01-27 22:37:56

回答

81

你可以不用,如果你使用括號使用分號:

def hello() :hello end 
37
def add a,b; a+b end 

分號是Ruby

內嵌語句終止或者你可以使用define_method方法。 (編輯:Ruby 1.9中棄用這一個)

define_method(:add) {|a,b| a+b } 
+0

在`end`之前不需要';`。 – Nakilon 2010-11-29 09:15:24

+0

@Nakilon,現在修復。謝謝 – edgerunner 2010-12-05 19:57:03

+3

Ruby 2+中似乎不推薦使用 – michau 2015-02-09 15:57:19

9

另一種方式:

define_method(:greet) { puts 'hello' } 

可能是使用,如果你不想爲方法進入新的領域,同時定義它。

+0

NoMethodError:在Ruby 1.9.3中調用Object:Class的私有方法`define_method' – Jared 2012-07-25 16:11:11

5

還有一種方法:

def greet() return 'Hello' end 
51

只要給予充分的新鮮答案:

一般避免單在線方法。儘管它們在野外有些流行,但它們的定義語法有一些特殊性,使得它們的使用不受歡迎。無論如何 - 應該有 不超過一個表達式的單行方法

# 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