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 secondsile eşdeğerdir 20.seconds().
İkinci olarak, bir "örtük dönüştürme" uygulanır. Yana 20bir olduğunu Intve Inthiçbir vardır secondsyöntemi, bir alan bir örtük dönüşüm için derleyici arar Intve döner bir şey var bir secondssenin 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 Intbir parametre, yapıcı bir örtülü tanımlayan Int => DurationIntdönüştürme. DurationIntbir secondsyö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ü secondsyö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ü DurationIntbir 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 )
secondsyö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 secondsancak 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ı?