SORU
16 Mart 2012, Cuma


Scala işlevi uygulamak nedir?

Hiç yapmacık unmarshalling ve verbing isimler (AddTwo bir sınıf iki ekler apply var!) anlaşıldı örnekler.

Sözdizimsel şeker, (bağlamdan tahmin ettiğim) bazı kodlar daha kolay hale getirmek için tasarlanmış olmalı diye anlıyorum.

Ne anlamı apply bir fonksiyonu olan bir sınıf verir mi? Ne için kullanılıyor ve ne amaçlar bu kodu daha, isimler vb unmarshalling verbing) yapar mı?

ne arkadaşı bir nesne kullanıldığında faydası olur mu?

CEVAP
16 Mart 2012, Cuma


Matematikçiler kendi küçük komik yolu var, bu yüzden yerine söyleyerek, "o zaman diyoruz fonksiyonu f geçen x parametre olarak" biz programcılar derdi, onlar hakkında konuşmak "uygulama işlevi f bağımsız x".

Matematik ve bilgisayar bilimleri, Uygulamak uygulanan bir işlevdir değişkenler fonksiyonlar.
Wikipedia

apply Scala Nesne Yönelimli ve Fonksiyonel paradigmalar arasındaki boşluğu kapatma amaca hizmet eder. Scala her işlev bir nesne olarak temsil edilebilir. Her fonksiyonu da OO türü vardır: örneğin, Int bir parametre ve döner Int alan bir işlev Function1[Int,Int] yazın OO olacak.

 // define a function in scala
 (x:Int) => x   1

 // assign an object representing the function to a variable
 val f = (x:Int) => x   1

Her şey Scala bir nesne olduğundan f Function1[Int,Int] nesne için bir referans olarak kabul edilebilir. Örneğin, işlevleri, yöntemleri yok çünkü toString yöntem saf bir işlev için imkansız olurdu Any, miras buna inanıyoruz

  f.toString

Veya compose f yöntemin çağrılması ve birlikte iki farklı fonksiyonlar zincirleme Function1[Int,Int] başka bir nesne tanımlayabiliriz:

 val f2 = f.compose((x:Int) => x - 1)

Şimdi Eğer gerçekten işlevi yürütmek istiyorsak, ya da matematikçi dediği gibi "bağımsız değişkenlerinin bir fonksiyonu" Function1[Int,Int] nesne apply yöntemi diyoruz: uygulayın

 f2.apply(2)

Yazma f.apply(args) her zaman istediğiniz için bir yürütme işlevini temsil gibi bir nesnedir Nesne Yönelimli bir yol, ama eklemek çok kalabalık kodu olmadan ekleme çok ek bilgi ve güzel olurdu olmak üzere daha fazla standart gösterim, gibi f(args). Orası Scala derleyicisi adımda ve her bir başvuru f bir işlevi, nesne ve yazma f (args) için geçerli argümanlar temsil işlevi derleyici sessizce genişler f (args) nesne yöntemi çağrısı f.apply (args).

Scala her işlev bir nesne olarak kabul edilir ve başka türlü de olabilir - her nesne apply yöntemi vardır sağlanan bir fonksiyonu olarak kabul edilebilir çalışır. Bu tür nesneleri işlev gösterimde kullanılabilir:

// we will be able to use this object as a function, as well as an object
object Foo {
  var y = 5
  def apply (x: Int) = x   y
}


Foo (1) // using Foo object in function notation 

Bir işlev bir nesne gibi muamele etmek istiyorum birçok kullanım durumlar vardır. En yaygın senaryo factory pattern. Kod fabrika bir yöntem kullanarak yığılmayı eklemek yerine. apply bağımsız değişken bir dizi ilişkili bir sınıfın yeni bir örneğini oluşturmak için nesne

List(1,2,3) // same as List.apply(1,2,3) but less clutter, functional notation

// the way the factory method invocation would have looked
// in other languages with OO notation - needless clutter
List.instanceOf(1,2,3) 

apply çok yöntem Scala işlevler ve nesneler arasındaki boşluğu kapatmak için sadece kullanışlı bir yoldur.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DorkmanScott

    DorkmanScott

    14 NİSAN 2006
  • Harvest: Greg Laurie

    Harvest: Gre

    6 HAZİRAN 2006
  • Kat Krazy

    Kat Krazy

    12 Kasım 2010