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

  • Chip Johnson

    Chip Johnson

    30 AĞUSTOS 2007
  • ICON

    ICON

    19 EKİM 2011
  • kev5124

    kev5124

    9 Kasım 2008