2011-09-29 26 views
29

mümkün yinelenen olmadan: Scala
Functions vs methods in Scala
What is the difference between def foo = {} and def foo() = {} in Scala?parantez ile fonksiyon arasındaki fark ve

biz

def foo():Unit = println ("hello") 

veya

tanımlayabilir
def foo:Unit = println ("hello") 

Aynı olmadıklarını biliyorum, ancak fark nedir ve ne zaman kullanılmalıdır?

Eğer daha önce cevaplanmışsa, lütfen beni bu bağlantıya yönlendirin.

+0

@MatthewFarwell Bağlantılı soru, parens sorusunu yanıtladığını sanmıyorum. –

+0

Ayrıca bkz. Http://stackoverflow.com/questions/6939908/scala-functions-with-no-arguments –

+1

Soru http://stackoverflow.com/questions/7409502/what-is-the-difference-between-def -foo-ve-def-foo-in-scala tam olarak aynıdır. – paradigmatic

cevap

37

0-arity Scala yöntemi, () parantezleri ile veya olmadan kullanılabilir. Bu, kullanıcıya, yöntemin, daha sonra val olarak uygulanabilecek olanın tersine, bir tür yan etkiye (örneğin, veriyi yitirmek veya yok etmek gibi) sahip olduğunu bildirmek için kullanılır.

Programming in Scala bakınız:

Böyle parametresiz yöntemler Scala oldukça yaygındır. Tersine, def yükseklik(): Int gibi boş parantezlerle tanımlanan yöntemler, boş-paren yöntemleri olarak adlandırılır. Önerilen kural, parametrelerin olmadığı her durumda parametresiz bir metot kullanmaktır ve metot, sadece içerilen nesnenin alanlarını okuyarak (özellikle değişebilir durumu değiştirmez) değişebilir duruma erişir.

Bu kongre üniforma erişim ilkesini desteklemektedir [...]

Özetlemek gerekirse, kapalı bırakarak herhangi bir parametre alıp yani parametresiz yöntemler olarak hiçbir yan etkileri vardır yöntemlerini tanımlamak için Scala stil teşvik edilmektedir boş parantezler. Öte yandan, hiçbir zaman parantez içermeyen yan etkileri olan bir yöntemi tanımlamamalısınız, çünkü o yöntemin başlatılması bir alan seçimi gibi görünür.

+0

"Yan etkiler" tanımını genişletebilir misiniz? – Jus12

+2

@ Jus12, kazandığınız veya Wikipedia'yı görebileceğiniz başka bir soru olacak - http://en.wikipedia.org/wiki/Side_effect_(computer_science) –