SORU
25 Temmuz 2009, CUMARTESİ


Parantez, nokta,, = (fonksiyonlar), parantez vb. atlayabilirsiniz zaman için kesin kurallar nelerdir?

(İhmal) parantez, nokta,, = (fonksiyonlar), parantez vb. atlayabilirsiniz zaman için kesin kurallar nelerdir?

Örneğin, (servis.findAllPresentations.olsun.ilk.oy.boyut) equalTo(2) olmalıdır.

  • service benim nesnedir
  • def findAllPresentations:Seçenek[List[Sunu]]
  • votes iade Listesi[Oy]
  • gerekirveolabilirhem gözlük işlevleri vardır

Neden gidemiyorum:

(service findAllPresentations get first votes size) must be equalTo(2)

?

Derleyici hata:

"RestServicesSpecTest.bu.hizmet.findAllPresentations tür [[List com.seçenek sharca.Sunum]] parametreleri kabul etmez"

Neden bir parametre geçmek için çalışıyorum sanıyorsun? Neden her yöntemi çağırmak için nokta kullanmam lazım?

Neden (service.findAllPresentations get first votes size) equalTo(2) eder.

< . p ^"bulunamadı:" . ilk değer

, "EqualTo olmalı 2" henüz (service.findAllPresentations.get.first.votes.size) equalTo 2, yöntem zincirleme gayet iyi çalışıyor olmalı? - nesne zincir zincir zincir param.

Scala kitaba baktı ve web sitesi yaptım ve gerçekten çok kapsamlı bir açıklama bulamıyorum.

Aslında, Rob H soru Yığın Taşması açıklar gibiWhich characters can I omit in Scala?tek geçerli durum kullanın atlama için,'. ' "işlenen operatör işlenen" tarzı operasyon ve Yöntem zincirleme değil yani?

CEVAP
25 Temmuz 2009, CUMARTESİ


Cevap sendeledi var. Her neyse, bunu açıklığa kavuşturmak için çalışacağım.

Önek, içek ve sonek gösterimler sözde kullanarak nokta atlayabilirsinizoperatör gösterimde. Operatör gösterim kullanırken, ve ancak o zaman, eğer en az iki parametre yöntemi geçirilir, orada parantez atlayabilirsiniz.

Şimdi, operatör gösterimi için bir notturyöntem-Araçağrıldığını hangi nesnenin yokluğunda kullanılan olamaz anlamına gelir.,

Kısaca gösterimler ayrıntı vereceğim.

Önek:

Sadece ~, !, - önek gösterimde kullanılabilir. Bu !flag val liability = -debt yazarken kullandığınız gösterimde.

Telkin:

Bu yöntem, bir nesne ve bu parametreler arasında göründüğü gösterimde. Aritmetik operatörler buraya uygun.

Sonek (suffix):

Bu gösterim yöntemi, bir nesne aşağıdaki durumlarda kullanılırve herhangi bir parametre alır. Örneğin, list tail ve postfix gösterimi yazabilirsiniz.

Sorun olmadan telkin gösterim çağırır, hiçbir yöntem körili olduğu sürece zincir. Örneğin, aşağıdaki tarzda ifade etmek istiyorum:

(list
 filter (...)
 map (...)
 mkString ", "
)

Aynı şey:

list filter (...) map (...) mkString ", "

Şimdi, neden filtre ve harita tek bir parametre alır, eğer burada parantez kullanarak mıyım? Onlara isimsiz işlevler geçiyorum çünkü. Anonim benim görevim sonu için bir sınır ihtiyacım olduğu için telkin stili ile anonim fonksiyonları tanımlar birbirine karıştıramam. Ayrıca, anonim fonksiyonu parametre tanımı telkin yöntemi son parametre olarak yorumlanabilir.

Birden çok parametre ile telkin kullanabilirsiniz:

string substring (start, end) map (_ toInt) mkString ("<", ", ", ">")

Körili fonksiyonları telkin gösterimde kullanmak için zor. Katlama işlevleri açık bir örneğidir:

(0 /: list) ((cnt, string) => cnt   string.size)
(list foldLeft 0) ((cnt, string) => cnt   string.size)

Telkin çağrı dışında parantez kullanmanız gerekir. Emin oyunda tam burada kuralları ben değilim.

Şimdi postfix hakkında konuşmak. Postfix, çünkü kullanmak zor olabilirasla herhangi bir ifade sonu dışında kullanılabilir. Örneğin, aşağıdakileri yapabilirsiniz:

 list tail map (...)

Çünkü kuyruk ifade sonunda görünmüyor. Bu da bir şey yapamazsınız zaten:

 list tail length

Parantez ifadeleri sonu işareti kullanarak telkin gösterimde kullanabilirsiniz:

 (list tail) map (...)
 (list tail) length

Postfix gösterimde it may be unsafe çünkü cesareti olduğunu unutmayın.

Bu bütün şüpheleri temizledi umarım. Aksi takdirde, sadece bir yorum bırakın ve onu geliştirmek için ne yapabileceğime bir bakarım.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • HouseholdHacker

    HouseholdHac

    6 Kasım 2007
  • Crossover

    Crossover

    18 HAZİRAN 2007
  • Top10Series

    Top10Series

    26 Kasım 2008