SORU
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 testi LocalJumpError yüzden o yöntem, gerek yok
  • break blok değer verir ve arama sona erer. Eğer blok yield .call break tarafından çağrıldı bu tatili çok yineleyici
  • next blok değer verir ve arama sona erer. Blok yield çağrıldı çizgi yield .call next geri dönüş değeri tarafından çağrıldı

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Anthony Le

    Anthony Le

    10 EKİM 2006
  • failblog

    failblog

    17 HAZİRAN 2008
  • Hot For Nutrition

    Hot For Nutr

    26 ŞUBAT 2007