在scala中可以在一個函數中定義一個本地塊。當地塊計算到最後一個語句,例如,scala中的「懸空」本地塊
val x = {val x =1;x+1}
這裏x==2
,內val x
是局部的該塊。
但是,編寫匿名類時,這些局部塊可能會導致惡意的錯誤。例如(來自斯卡拉的參考)
new Iterator[Int]
{...} // new anonymous class inheriting from Iterator[Int]
new Iterator[Int]
{...} //new Iterator[Int] followed by a "dangling" local block
兩種情況的區別令人沮喪。 有時這兩個代碼片段可以編譯,例如,如果使用Iterator[Int]
,Range(0,1,1)
而不是Iterator[Int]
。
我想到了它,並找不到需要「搖晃」本地塊(即,不使用值的本地塊)(或使代碼更優雅)的情況。
有沒有我們想要一個本地塊,而不使用它的值(並沒有把它放在一個不同的函數中並調用這個函數)的情況?我會爲例子感到高興。
如果不是這樣,我認爲這將是很好發出警告(甚至altogther禁止)每當scalac
遭遇「晃來晃去」局部塊。我錯過了什麼嗎?
這看起來更我喜歡的東西的結束帶來了對Scala的郵件列表不是堆棧討論溢出。 – 2009-10-06 15:05:55
我考慮將它發佈到Scala郵件列表中,但由於我是scala/Java的新手,我想我可能在我對本地塊(在scala或普通FP中)的理解中錯過了一些補充,因此我決定檢查它首先在這裏。 – 2009-10-06 18:44:23