SORU
5 Kasım 2009, PERŞEMBE


&Quot;geri arama uygulamak için nasıl" Ruby?

-Destek çağrısı Yakut - ya da eğer daha iyi bir şey ( ve daha az C gibi) varsa emin değilim. C, bir şey yap:

void DoStuff( int parameter, CallbackPtr callback )
{
  // Do stuff
  ...
  // Notify we're done
  callback( status_code )
}

İyi bir Yakut eşdeğer nedir? Geçti sınıf yöntemi çağırmak istiyorum aslında, belirli bir durum içinde karşılandığında "" . DoStuff

CEVAP
5 Kasım 2009, PERŞEMBE


Deyimsel değil ruby eşdeğer olur.

def my_callback(a, b, c, status_code)
  puts "did stuff with #{a}, #{b}, #{c} and got #{status_code}"
end

def do_stuff(a, b, c, callback)
  sum = a   b   c
  callback.call(a, b, c, sum)
end

def main
  a = 1
  b = 2
  c = 3
  do_stuff(a, b, c, method(:my_callback))
end

Deyimsel yaklaşım bir yöntem bir başvuru yerine bir blok geçmek olacaktır. Bir blok duran bir yöntem üzerinde bir avantaj bağlam - bloğu kapsamı içinde ilan edildi değişkenler için başvurabilirsiniz ** 6, Bir çok. Bu aşağı do_stuff geri geçirmesi gerektiğini parametre sayısını azaltır. Örneğin:

def do_stuff(a, b, c, &block)
  sum = a   b   c
  yield sum
end

def main
  a = 1
  b = 2
  c = 3
  do_stuff(a, b, c) { |status_code|
    puts "did stuff with #{a}, #{b}, #{c} and got #{status_code}"
  }
end

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Autodesk 3ds Max Learning Channel

    Autodesk 3ds

    23 HAZİRAN 2010
  • CruzerLite

    CruzerLite

    1 EKİM 2011
  • Liam Underwood

    Liam Underwo

    19 Mayıs 2009