24 ŞUBAT 2010, ÇARŞAMBA
Kullanarak 'return' bir Yakut blok
Gömülü bir betik dili, yani "son kullanıcı" Ruby kod bloğu içinde yazılmış. Ruby 1.9.1 kullanmaya çalışıyorum Bu bir sorun, kullanıcıların örtülü geri dönüş değerleri hakkında endişelenmenize gerek yok bu yüzden 'blok anahtar kelime,. kullanabilmek için ... Bu düşünceyle, bu yapmak istediğim bir şey
def thing(*args, &block)
value = block.call
puts "value=#{value}"
end
thing {
return 6 * 7
}
Eğer kullanırsam 'dönüş' yukarıdaki örnekte, bir LocalJumpError. Bu söz konusu blok Proc ve lambda değil farkındayım. Kodu ben '' ama gerçekten 'dönüş' bu senaryoda. kullanabilmek tercih ederim dönüş kaldırırsanız çalışır Bu mümkün mü? Lambda blok dönüştürme denedim ama sonuç aynı.
CEVAP
24 ŞUBAT 2010, ÇARŞAMBA
Sadece bu bağlamda next
kullanın:
$ irb
irb(main):001:0> def thing(*args, &block)
irb(main):002:1> value = block.call
irb(main):003:1> puts "value=#{value}"
irb(main):004:1> end
=> nil
irb(main):005:0>
irb(main):006:0* thing {
irb(main):007:1* return 6 * 7
irb(main):008:1> }
LocalJumpError: unexpected return
from (irb):7:in `block in irb_binding'
from (irb):2:in `call'
from (irb):2:in `thing'
from (irb):6
from /home/mirko/.rvm/rubies/ruby-1.9.1-p378/bin/irb:15:in `<main>'
irb(main):009:0> thing { break 6 * 7 }
=> 42
irb(main):011:0> thing { next 6 * 7 }
value=42
=> nil
return
yöntem her zaman döndürür, ama eğer ırb bu parçacık testiLocalJumpError
yüzden o yöntem, gerek yokbreak
blok değer verir ve arama sona erer. Eğer blokyield
.call
break
tarafından çağrıldı bu tatili çok yineleyicinext
blok değer verir ve arama sona erer. Blokyield
çağrıldı çizgiyield
.call
next
geri dönüş değeri tarafından çağrıldı
Bunu Paylaş:
kullanarak bir blok ortasında dönen...
Blok Yakut yorum...
Ekle&; style= " display:"blok&quo...
"kullanarak" blok SqlConnect...
TransactionManagementError "'...