Yanıtlar:
Bir kaç şey oluyor.
İlk olarak, Scala nokta ve parantezlerin birçok yöntem çağrısından çıkarılmasına izin verir, bu nedenle * 20 seconds
ile eşdeğerdir 20.seconds()
.
İkinci olarak, bir "örtük dönüştürme" uygulanır. Yana 20
bir olduğunu Int
ve Int
hiçbir vardır seconds
yöntemi, bir alan bir örtük dönüşüm için derleyici arar Int
ve döner bir şey var bir seconds
senin yöntem çağrısı kapsamında kısıtlanmadığı arama ile, yöntem.
İçe aktarmış DurationInt sizin kapsamı içine. Yana DurationInt
örtülü bir sınıfı, sahip olan Int
bir parametre, yapıcı bir örtülü tanımlayan Int => DurationInt
dönüştürme. DurationInt
bir seconds
yöntemi vardır, bu nedenle tüm arama kriterlerini karşılar. Bu nedenle, derleyici aramanızı new DurationInt(20).seconds
** olarak yeniden yazar .
* Bunu genel olarak söylüyorum. 20.seconds()
aslında geçersizdir çünkü seconds
yöntemin parametre listesi yoktur ve bu nedenle , yöntem çağrısında parenslerin atlanması gerekir .
** Aslında, bu tam olarak doğru değildir çünkü DurationInt
bir değer sınıfıdır, bu nedenle derleyici mümkünse tamsayıyı kaydırmaktan kaçınacaktır.
new DurationInt(20).seconds()
nasıl yaptığını bildiğiniz sürece çok daha okunabilir )
seconds
yöntem parens olmadan tanımlanır, bu nedenle onu parantez ile çağırmak bir hatadır.
20.seconds()
Scala'da yazabileceğinizi söylemek istemedim , sadece derleyicinin aramayı bu şekilde çevirdiğini söyledim . Bu durumda olduğu gibi, karşılık gelen yöntemin parametre listesi yoksa, Scala'nın parensleri çıkarmanızı gerektirdiğini belirtmek gerekir .
Orada meydana gelen "sihir", "örtük dönüştürme" olarak adlandırılır. Örtük dönüştürmeleri içe aktarıyorsunuz ve bazıları Int (ve Double) ile Süre arasındaki dönüşümü gerçekleştiriyor. Senin uğraştığın şey bu.
import scala.concurrent.duration._
çözdüğü, 20 seconds
ancak DurationConversions
Özelliği gerçekten içe aktarmanın neden çözmediği hakkında bir fikriniz var mı? DÜZENLEME : Gerçekte ne ithal ettiklerini yeni anladım DurationInt
. Sanırım bunun nedeni gerçek Özelliği içe aktaramamanız mı? Sadece Özelliğin somut bir uygulaması mı?