SORU
10 EYLÜL 2009, PERŞEMBE


Nasıl ruby bloğu dışarı kırmak için?

Burada Bar#do_things:

class Bar   
  def do_things
      Foo.some_method(x) do |x|
            y = x.do_somethign
            return y_is_bad if y.bad? # how do i tell it to stop and return do_things? 
            y.do_something_else
      end
      keep_doing_more_things
  end
end

Ve burada Foo#some_method:

class Foo
    def self.some_method(targets, &block)
      targets.each do |target|
        begin
          r = yield(target)
        rescue 
         failed << target
        end
     end
   end
end

Zam kullanma hakkında düşündüm, ama genel yapmaya çalışıyorum, Foo herhangi bir belirli bir şey koymak istemiyorum.

CEVAP
10 EYLÜL 2009, PERŞEMBE


10* *anahtar kelime kullanın.

Düzenleme: Eğer bir sonraki öğeye devam etmek istiyorsanız, break kullanın.

Bir blok içinde bir sonraki kullanımı: Sonraki bir blok içinde kullanıldığında, blok hemen çıkın, sonra tekrar blok çağırarak yeni bir döngü başlayacak olan yineleyici yöntemi, denetimi döndürmeden neden olur:

f.each do |line|              # Iterate over the lines in file f
  next if line[0,1] == "#"    # If this line is a comment, go to the next
  puts eval(line)
end

Blok kırmak kullanımı: Bir blok kullanıldığında, transferler yineleyici çağırma aşağıdaki ilk ifade bloğu çağrıldığında yineleyici dışında blok ve kontrol kır

f.each do |line|             # Iterate over the lines in file f
  break if line == "quit\n"  # If this break statement is executed...
  puts eval(line)
end
puts "Good bye"              # ...then control is transferred here

Ve son olarakbir blok içinde geri dönüş kullanımı: Her zaman geri dönmek kapsayan yöntemi, blok içinde ne kadar iç içe olursa olsun, (Lambda durumu hariç) neden olur:

def find(array, target)
  array.each_with_index do |element,index|
    return index if (element == target)  # return from find
  end
  nil  # If we didn't find the element, return nil
end

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BenjiManTV

    BenjiManTV

    20 Mart 2011
  • Bryan Smith

    Bryan Smith

    12 Mart 2006
  • Djbasilio AuToBaSs

    Djbasilio Au

    20 Aralık 2008