' => arasındaki fark ne; , ()=> ve Birim=>
Tartışma yok ve hiçbir değeri döndürür (eğer bilmen gerekiyorsa, JavaScript setTimeout fonksiyonu, taklit ediyorum.) götüren bir işlevi temsil etmeye çalışıyorum
case class Scheduled(time : Int, callback : => Unit)
diyerek derleme değildir " `' parametreleri arama adı olmayabilir" . val
case class Scheduled(time : Int, callback : () => Unit)
derler, ama çağrılacak olan garip, yerine
Scheduled(40, { println("x") } )
Bunu yapmak zorundayım
Scheduled(40, { () => println("x") } )
Ayrıca çalışır
class Scheduled(time : Int, callback : Unit => Unit)
ama daha-az-mantıklı bir şekilde çağrılır
Scheduled(40, { x : Unit => println("x") } )
(Ne olur yazın Birimi?) bir değişken Ne Benistiyorumtabii ki, eğer sıradan bir fonksiyon olsaydı onu çağırmak benim yapacağım çağır bir yapıcı:
Scheduled(40, println("x") )
Bebek biberonunu ver!
CEVAP
-İsmini: =>Yazın
many ways parametrelerden biri olan call-by-name, => Type
gösterim standları geçirilebilir. Eğer onlara aşina değil ise bile, günümüzde çoğunlukla olsa da, bu wikipedia makale okumak için biraz zaman ayırdığınız tarafından değer arama ve referans olarak arama yapmanızı öneririm.
Ne demek geçirildiyerinedeğer adı için işlev içinde. Örneğin, bu fonksiyon:
def f(x: => Int) = x * x
Eğer ararsam bu böyle
var y = 0
f { y = 1; y }
Sonra kodu bu şekilde yürütülür
{ y = 1; y } * { y = 1; y }
O olursa ne olur bu konuya değiniyor olsa da tanımlayıcı adı bir çatışma var. Call-by-name, bir mekanizma yakalama kaçınarak adlı geleneksel olarak yer değiştirme adı çatışmaları önlemek için alır. Scala, ancak, bu parametre içinde -- tanımlayıcı isim başvurabilir mi aynı sonucu başka bir şekilde uygulanan veya çağrılan işlev gölge tanımlayıcıları.
Diğer bazı noktaları diğer iki açıkladıktan sonra anlatacağım o aramadan adı ile ilgili.
0-parametre Fonksiyonlar: () =>Yazın
Sözdizimi () => Type
Function0
bir türü için duruyor. O, hiçbir parametre alan bir fonksiyon bir şey. Bu eşdeğer, ki size()
-- hayır parametreleri alır ve bu yöntem bir numara arıyor.
Bu bir sözdizimi sözdizimi çok benzer ilginç, ancak,anonim fonksiyon değişmezbazı karışıklığa neden olan., Örneğin,
() => println("I'm an anonymous function")
anonim bir fonksiyonu parametre değişmez 0, olanyazın
() => Unit
Yazabiliriz:
val f: () => Unit = () => println("I'm an anonymous function")
Ancak çok önemli.
Birim =>Yazın
Bu aslında sadece 35 ** türü olan Function1
, bir. Bunu yazmak için başka yollar (Unit) => Type
Function1[Unit, Type]
olurdu. Şey... bu insanın ne istediğini hiç olması pek mümkün değildir. Unit
türün temel amacı bir ilgi olmadığını gösteren bir değeri vardır, bu yüzden mantıklı gelmiyoralırsınızbu değer.
Örneğin, düşünün
def f(x: Unit) = ...
Bir olasılıkla x
ile ne yapabilirim? Sadece bir tane almak zorunda kalmazsınız tek bir değere sahip olabilir. Bir olası fonksiyonları Unit
dönen zincirleme olurdu:
val f = (x: Unit) => println("I'm f")
val g = (x: Unit) => println("I'm g")
val h = f andThen g
Çünkü andThen
sadece tanımlı Function1
ve işlevleri zincirleme geri dönüyor Unit
vardı, biz tanımlamak için bunları gibi tipi Function1[Unit, Unit]
edebilmek için zincir.
Karışıklık kaynakları
İlk karışıklığı kaynağı 0-parametre fonksiyonlar da call-by-adı için var olduğunu yazın ve yazınsal arasındaki benzerlik düşünüyor. Diğer bir deyişle, çünkü düşünme
() => { println("Hi!") }
() => Unit
için değişmez
{ println("Hi!") }
=> Unit
bir edebi olur. Değil. Birkod bloğubir edebi değil.
Karışıklık başka bir kaynak Unit
yazındeğer0-parametre gibi görünüyor ()
, yazılır listesi parametre (ama değil).
' => arasındaki fark ne; , ()=&...
Entegrasyon ve birim testleri arasında...
'format-patch gıt arasındaki fark...
Arasındaki fark==[0]C=='\0' ...
Ne'is_null ($) var ve (=== null$v...