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
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.
YAML ve JSON arasındaki fark nedir? Di...
Scala'nın durumu, sınıf ve sınıf ...
Scala artış var ve val tanımı arasında...
Scala içinde JavaConverters ve JavaCon...
Zaman uyumu ve kritik bölüm arasındaki...