SORU
16 Kasım 2009, PAZARTESİ


'proc arasındaki fark ne Ruby ve lambda?

Ve ne zaman yerine başka birini kullanmak istiyorsunuz?

CEVAP
16 Kasım 2009, PAZARTESİ


Tek fark argümanlar tanıtıcı şekilde. Bir proc proc {} Proc.new {} oluşturma eşdeğerdir. Ancak, lambda {} kullandığınız argümanlar geçirilen sayısını kontrol eden bir proc verir. ri Kernel#lambda:

EşdeğerProc.yeninesneleri parametreleri olarak adlandırılan zaman geçti sayısını kontrol sonuç Proc hariç.

Bir örnek:

p = Proc.new {|a, b| puts a**2 b**2 } # => #<Proc:0x3c7d28@(irb):1>
p.call 1, 2 # => 5
p.call 1 # => NoMethodError: undefined method `**' for nil:NilClass
p.call 1, 2, 3 # => 5
l = lambda {|a, b| puts a**2 b**2 } # => #<Proc:0x15016c@(irb):5 (lambda)>
l.call 1, 2 # => 5
l.call 1 # => ArgumentError: wrong number of arguments (1 for 2)
l.call 1, 2, 3 # => ArgumentError: wrong number of arguments (3 for 2)

Ayrıca Ken belirttiği gibi, bir lambda içinde return kullanarak lambda değeri döndürür, ama bir işlem return kullanma kapsayan blok döndürür.

lambda { return :foo }.call # => :foo
return # => LocalJumpError: unexpected return
Proc.new { return :foo }.call # => LocalJumpError: unexpected return

Bu yüzden en hızlı kullanır, ikisi de aynı şey, ama isterseniz otomatik katı bağımsız denetimi (de bazen yardımıyla hata ayıklama) veya kullanman gerekiyorsa return açıklamaya dönüş değeri proc, lambda.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BumbleDroid

    BumbleDroid

    18 EKİM 2010
  • Menglong Tav

    Menglong Tav

    18 Temmuz 2010
  • Phymec

    Phymec

    18 Temmuz 2009