我認爲這是不值得的努力,但「只爲科學」:
可以使用包對象絕招:
定義的別名導入的庫是否它是一個對象,類型或功能(由scala.Predef
啓發):
package object test {
def pow = scala.math.pow _
}
,然後所有這些包對象構件是自動可用而不在同一封裝中導入:
package test
object TestIt {
val r = pow(2, 3)
}
以類似的方式,你可以通過暗示使用另一種方式。
定義轉換/操作,你的庫確實爲暗示:
package object test {
implicit def strToInt(str: String): Int = str.length
}
隱含使用它:
package test
object TestIt {
val strLength: Int = "abc"
}
Implicits沒有被放置在包對象,看到的隱式解析對於斯卡拉發現暗示的其他地方。
還有一個選擇是使用功能範圍,或者你可以用同樣的方式對象範圍:
package test
trait Library {
def doSmth: String = "It works"
}
object Library extends Library
object Scope {
def libraryScope[T](codeBlock: Library => T): T = {
codeBlock(Library)
}
}
,然後用它是這樣的:
package test
object SecondTest {
Scope.libraryScope { lib => lib.doSmth }
}
在所有3種情況下,你避免在其他地方使用導入一次。除非有特殊情況,否則所有這些選項都不會使您的代碼更加清晰。
AFAIK這是不可能的。但是,在每個文件的頂部都有導入語句沒有任何問題。 – Roman
啊。那真不幸。是的,我同意它沒有錯,但它似乎完全可以避免。 – TimY