SORU
8 Aralık 2010, ÇARŞAMBA


Parantez ve parantez, Scala, resmi arasındaki fark nedir ve ne zaman kullanılmalıdır?

Parantez () ve parantez içinde {} işlevlere geçirilmesi bağımsız değişkenleri arasında resmi fark nedir?

Bu aldığım duyguProgramming in Scalakitap Scala oldukça esnek ve en çok sevdiğim bu işime gerektiğini, ancak bazı durumlarda, Diğerleri yapmadığı halde derleme.

Örneğin (sadece bir örnek; genel durum anlatılır herhangi bir yanıt değil, bu belirli bir örnek sadece minnettar olurum gibi geliyordu bana

val tupleList = List[(String, String)]()
val filtered = tupleList.takeWhile( case (s1, s2) => s1 == s2 )

=>hata: basit anlatım başlamak yasadışı

val filtered = tupleList.takeWhile{ case (s1, s2) => s1 == s2 }

=>güzel.

CEVAP
8 Aralık 2010, ÇARŞAMBA


Bu konuda yazmak için bir kez denedim, ama kuralları biraz dağınık olduğu gibi sonunda verdim. Temelde, buna alışmanız gerekecek.

Yöntem çağrıları için parametreleri geçirerek. en iyi ayraç ve parantez kullanmak olabilir konsantre olmaktır belki de birbirlerinin yerine: Sanaolabilirkıvırcık parantez varsa parantez yerine, ancak ve ancak, bu yöntem, tek bir parametre bekler. Örneğin:

List(1, 2, 3).reduceLeft{_   _} // valid, single Function2[Int,Int] parameter

List{1, 2, 3}.reduceLeft(_   _) // invalid, A* vararg parameter

Ancak, bu kurallar daha iyi kavramak için bilmeniz gereken çok şey var.

Parens ile derleme denetimi arttırdı

Sprey yazarları denetimini, derleme artan veriyorlar çünkü yuvarlak parens tavsiye ederim. Bu Sprey gibi Dolaylı için özellikle önemlidir. Parens kullanarak sadece tek bir satır verilmelidir derleyici söylüyorsun; bu nedenle eğer yanlışlıkla iki ya da daha fazla verin, şikayet edecek. Şimdi bu ayraç ile durum – örneğin, bir operatör bir yerde unutursanız, o zaman kodunuzu derlemek ve beklenmeyen sonuçlar ve bulunması çok zor bir hata potansiyel elde değil. Aşağıda yapmacık ifadeler saf ve en azından bir uyarı verecektir beri) ama yapar:

method {
  1  
  2
  3
}

method(
  1  
  2
  3
)

İlk derler, ikinci error: ')' expected but integer literal found verir. Yazar 1 2 3 yazmak istedim.

Bir varsayılan bağımsız değişkenleri ile çoklu parametre yöntemleri için de benzer şey söylenebilir; imkansız yanlışlıkla parens kullanırken parametreleri ayırmak için virgül unutmak kolaydır.

Ayrıntı

Ayrıntı hakkında genellikle gözden kaçan önemli bir not. Kullanarak ayraç kaçınılmaz olarak yol için ayrıntılı bir kod bu yana Scala stil rehberi açıkça bildiren kapanış ayraç olmalı kendi hattı: http://docs.scala-lang.org/style/declarations.html “... kapanış brace kendi çizgi hemen şu son satırı fonksiyonu.” Otomatik reformatters çok, Güneş gibi, sizin için otomatik olarak bu yeniden biçimlendirme bir konser verecek. Bu yüzden ne zaman yuvarlak parens kullanarak konuşmaya çalış.

Telkin Gösterimde

Telkin gösterim kullanırken, List(1,2,3) indexOf (2) Eğer yalnızca tek bir parametre varsa parantez ihmal ve List(1, 2, 3) indexOf 2 olarak yazabilirsiniz. Bu nokta-gösterim durumda değil.

Çok sembolik bir ifade, x 2 a => a % 2 == 0 gibi tek bir parametre varsa parantez ifadenin sınırlarını belirtmek için kullanmanız gerektiğini unutmayın.

Dizilerini

Parantez bazen ihmal, bazen bir demet ((1, 2)) gibi ekstra parantez ihtiyacı var ve bazen dış parantez, (1, 2) gibi ihmal edilebilir. Bu karışıklığa neden olabilir.

Fonksiyonu case ile Kısmi Fonksiyon rakamları

Scala fonksiyonu ve kısmi fonksiyon rakamları için bir sözdizimi vardır. Bu gibi görünüyor:

{
    case pattern if guard => statements
    case pattern => statements
}

case ifadeleri kullanabileceğiniz başka yerler match catch anahtar kelimeler ile

object match {
    case pattern if guard => statements
    case pattern => statements
}
try {
    block
} catch {
    case pattern if guard => statements
    case pattern => statements
} finally {
    block
}

Olamaz başka bir bağlamda case ifadeler kullanın. Eğer case, kullanmak istersenizgerekayraç. Durumda bir fonksiyon ve parçalı fonksiyon arasındaki ayrımın değişmez kılan ne olduğunu merak ediyorsanız, cevap: bağlam. Eğer Scala bir işlevi bekliyorsa, bir fonksiyon olsun. Eğer kısmi bir işlev beklediğini, kısmi bir fonksiyon olsun. Eğer her iki bekleniyorsa, belirsizlik ile ilgili bir hata veriyor.

İfadeler ve Engeller

Parantez taşıyıcının yapmak için kullanılabilir. Ayraç kodu olduğunu . blok yapmak için kullanılabilir ^em>değilbir fonksiyon gibi kullanmaya dikkat edin) bu kadar değişmez. Kod bloğu her bir alma deyimi, bir deklarasyon ya da bir ifade olabilir birden fazla ifadeler içerir. Şöyle bir şey:

{
    import stuff._
    statement ; // ; optional at the end of the line
    statement ; statement // not optional here
    var x = 0 // declaration
    while (x < 10) { x  = 1 } // stuff
    (x % 5)   1 // expression
}

( expression )

Eğer bildirimleri, birden çok deyimleri ihtiyacınız varsa, import ya da bir şey, ayraç gerekir. Ve bir ifade, bir deyim olduğu için, parantez ayraç içinde görünür. Ama ilginç tarafı kod bloklarıayrıcaonları her yerde kullanabilmek için ifadeleriçindebir ifade:

( { var x = 0; while (x < 10) { x  = 1}; x } % 5)   1

İfadeleri ifadeleri ve kodları blok ifadeler olduğundan, her şeyin altında geçerlidir:

1       // literal
(1)     // expression
{1}     // block of code
({1})   // expression with a block of code
{(1)}   // block of code with an expression
({(1)}) // you get the drift...

Bunlar değiştirilebilir değil

Temelde, () veya yardımcısı ile {} tam tersi başka bir yerde bulamazsın. Örneğin:

while (x < 10) { x  = 1 }

Bu yöntem çağrısı değil, başka bir şekilde yazabilirsiniz. Peki, ayraç koyabilirsiniziçindecondition olarak kullanmak için parantez paranteziçindekıvırcık kod bloğu için parantez:

while ({x < 10}) { (x  = 1) }

Yani, bu yardımcı olur umarım.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jeremy Stark

    Jeremy Stark

    23 Mayıs 2010
  • Max Lee

    Max Lee

    18 AĞUSTOS 2006
  • tinycammonitor

    tinycammonit

    14 Aralık 2010