2012-11-19 8 views
30

Python'da boş bir işlevi, koşulu, döngüyü tanımlamak için pass anahtar sözcük var ... Ruby için benzer bir şey var mı?Ruby'de "pass" eşdeğeri

Python Örnek:

def some_function(): 
    # do nothing 
    pass 

cevap

9

Hep böyle pass gerekli değildir, end ifadeler var.

Yakut örnek:

def some_function() 
    # do nothing 
end 
42

Hayır, Ruby böyle bir şey yoktur. Boş bir blok, yöntem, modül, sınıf vb. Istiyorsanız, boş bir blok yazmanız yeterlidir:

def some_method 
end 

Bu kadar.

Python, her blok bir "sahte" hayır-op ifadeye ihtiyacım yüzden, en azbir ifade içermesi gerekmiyor. Ruby, 'un ifadelerine sahip olmadığını, yalnızca ifadeleri olduğunu ve bir ifadenin sıfır ifadeleri içermek için tamamen yasal olduğunu. Eğer bağımsız değişken herhangi bir sayı ile serbestçe kullanmak mümkün olmasını istiyorsanız

0

, argümanlardaki üzerinde küçük bir hile olması gerekir:

def gobble *args, ≺ end 
8

Tek hat fonksiyonları ve sınıfları

def name ; end 

class Name ; end 

, pseudocode için düzgün çalışır. Ruby herşey bir ifadesi Böylece o boş bırakmak gayet önce

olarak cevap verdi. boş yöntemleri kullanmalarına izin verdiği için Ruby bunun için yararsız olduğunu geçiş anahtar kelime

def pass 
end 

# OR 

def pass; end 

Not seviyorum ama meraklı olduğunu iseniz piton programcılar için

def name 
end 

class Name 
end 

Bir yakut alternatif pass, bu en basit ve en temiz alternatiftir.

ve şimdi bu işlevi blok içinde kullanabilirsiniz ve aynı şekilde çalışacaktır.

def name 
    pass 
end 

# OR 

class Name 
    pass 
end 

Geçişin, dönen bir işlev olduğunu aklınızda bulundurun; bu nedenle, nasıl kullanabileceğinizi size kalmış.

begin 
    Process.kill('CONT') 
rescue 
end 

Process.kill('CONT', pid) rescue nil 

yerine yapıyor:

temelde yararlı olduğunu
def some_function 
    nil 
end 

bir yolu bu konuda hiçbir şey yapmadan ama ne zaman kurtarma şey geçerli:

4

nil

muhtemelen eşdeğerdir

Ve bu da sözdizimi hatasına neden olur:

> throw :x rescue 
SyntaxError: (irb):19: syntax error, unexpected end-of-input 
     from /usr/bin/irb:11:in `<main>' 

Notlar:

def some_function; end; some_function olur hala dönüşnil. Ayrıca nilnil da yine nil numaralı telefondan dönecektir.

+0

Bu çözümdür. İyi iş. Ben mi arıyordum? : Hiçbir şey yapma yolu: 'x == true? y = false: # false olsaydı hiçbir şey yapamazdım x == true? y = false: nil', mükemmel çalıştı! – DeeJayh

+1

Sadece yapamayacağın bir sebep var mı? – pixatlazaki

0

Diğerlerinin dediği gibi, Ruby'de bir yöntem gövdesini boş bırakabilirsiniz. Bununla birlikte, bu Python'un pass ile başardığıdan biraz farklı olabilir.

Ruby'de her şey bir nesnedir. Bazı programlama dilleri null veya nil ile işaret değerin yokluğu, aslında Ruby NilClass bir nesnedir.

(irb cinsinden) aşağıdaki örneği inceleyin:

class A 
    def no_op 
    end 
end 

A.new.no_op 
# => nil 
A.new.no_op.class 
# => NilClass 
A.new.no_op.nil? 
# => true 

İşte Ruby'nin NilClass documentation referans için. Python'un pass'un Python'da deneyimli olmasa da, dilin sözdizimsel sınırlamalarının üstesinden gelmek için kullanıldığına inanıyorum.