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

  • 3dmmfavs

    3dmmfavs

    29 Kasım 2009
  • TheDamnWreckless

    TheDamnWreck

    12 Temmuz 2010
  • YouChewBu

    YouChewBu

    26 Ocak 2009