2010-11-29 16 views
67

Ruby'de bir satırda bir yöntemi tanımlamanın tek yolu def greet; puts "hello"; end mu?Ruby'de bir satırda bir yöntemi nasıl tanımlarım?

+10

Yanıtlardan da görebileceğiniz gibi, tek bir satırda bir yöntemi farklı yollarla tanımlamak mümkündür, ancak soru şu ki, değil mi? Herhangi bir tanım, bakım ve okunabilirlik nedenlerinden dolayı net ve temiz bir şekilde yazılmalıdır, bu yüzden tek satırlık, hantal hale geldiğinde veya kafa karıştırıyorsa yayılır. Bazı diller, kod kodlamanın bir yolu olarak ters kodlamayı teşvik ediyor gibi görünmektedir, ancak Ruby kodlama stili, zarafetin, okunabilirliğin ve sürekliliğin, titizlik üzerinde yapılmasını teşvik etmektedir. İlk üçü tamamlayın ve size boyun eğeceğiz. –

cevap

81

Eğer parantez kullanırsanız noktalı virgül kullanma ihtiyacı önleyebilirsiniz hat yöntemleri. Her ne kadar onlar vahşi bir şekilde popüler olsalar da, kullanımlarını istenmeyen bir hale getiren tanım sözdizimleri hakkında birkaç özellik vardır. Herhangi bir oranda - tek satırlık yöntemde birden fazla ifade olmaksızın olmalıdır. kurala

# 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 

Bir istisna boş cisim yöntemleridir.

# good 
def no_op; end 

bbatsov/ruby-style-guide'dan.

+0

Bu, noktalı virgül kullanmaktan daha uzun ...? – Apollys

37
def add a,b; a+b end 

noktalı virgül Ruby

için satır içi deyimi sonlandırıcıdır Yoksa define_method yöntemi kullanabilirsiniz. (Düzenleme: Yakut 1.9 kullanımdan kaldırılmış Bu seferki)

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

'' '' 'bit'den önce gerek yoktur. – Nakilon

+0

@Nakilon, şimdi sabit. Teşekkürler – edgerunner

+3

Ruby 2 + – michau

9

bir başka yolu: Eğer tanımlarken yöntemi için yeni kapsamını girmek istemiyorsanız

define_method(:greet) { puts 'hello' } 

kullanılabilir.

def hello() :hello end 
+0

NoMethodError'da kullanım dışı bırakılmış gibi görünmüyor: özel yöntem 'define_method 'çağrısında Nesne: Ruby'de Sınıf 1.9.3 – Jared

+3

' define_method', Ruby 1.9'da "özelleştirildi" – edgerunner

+0

Kullanımdan kaldırıldı! @Jared Güncelleme! : P –

5

bir diğer adres:

genel kaçınmak tek olarak:

def greet() return 'Hello' end 
+11

Ruby'de, bir yöntemin dönüş değeri, son ifadeyle döndürülen değerdir. Koruma maddesi olmadığı için buraya dönmek zorunda değilsin. – Damien

51

Sadece tam taze bir cevap vermek

İlgili konular