當我不想使用implicits但希望有一個函數將(例如)Int
轉換爲MyClass
時,這很有用。Scala中python @classmethod或@staticmethod的等價物是什麼?
1
A
回答
4
在斯卡拉,object
用於定義靜態方法。你所描述聽起來像你想的:
class MyClass(n: Int)
object MyClass {
def apply(n: Int) = new MyClass(n)
}
所以,你可以做以下任一:
scala> val a = MyClass.apply(3)
a: MyClass = [email protected]
scala> val b = MyClass(3) // works allowed because method is called "apply"
b: MyClass = [email protected]
我會稱之爲「工廠法」。
1
你可以把一個方法到配對對象,將其從斯卡拉調用靜態的方式(即沒有一個對象實例):
// Scala
class A
object A {
def staticMethod = println("Foo!")
}
A.staticMethod // prints "Foo!"
注意,Scala編譯器實際上是創建一個名爲A$
一種新的合成類對於單身人士object A
,因此行A.staticMethod
在運行時存在的A$
的單個實例上調用該方法。
值得注意的是:Scala編譯器還會在A
對字節碼級的靜態方法staticMethod
轉發調用A$.staticMethod
- 在你在你的項目中混合Java和Scala代碼的情況下,這意味着你也能然而
// Java
A.staticMethod(); // works
,如果你聲明與同伴類A
同名的方法,而一切都在Scala中以同樣的方式仍然有效,靜態轉發方法:從Java調用這個靜態方法是這樣A
將會生成而不是,您將不能o從Java撥打電話staticMethod
:
// Scala
class A {
def staticMethod = println("I'm doing something else.")
}
object A { // no companion class
def staticMethod = println("Foo!")
}
A.staticMethod // prints "Foo!"
// Java
A.staticMethod(); // won't work
相關問題
- 1. Python - staticmethod vs classmethod
- 2. 什麼是C++ typeid的Scala等價物?
- 3. 爲什麼使用classmethod而不是staticmethod?
- 4. python中'gem'的等價物是什麼?
- 5. Python中imadjust的等價物是什麼?
- 6. python中print_r()的等價物是什麼?
- 7. 什麼是Python的os.walk的等價物?
- 8. 什麼是java.util.zip.Inflater的Python等價物?
- 9. 什麼是Python os.pathsep的等價物?
- 10. 什麼是Tomcat的Python等價物?
- 11. Python`itertools.chain`的Ruby等價物是什麼?
- 12. 什麼是Perlbrew的Python等價物?
- 13. REBOL或Red中Python列表[3:7]的等價物是什麼?
- 14. 什麼是Java Akka中的scala伴隨對象的等價物?
- 15. 什麼是Perl的ucfirst()或s /// e的Python等價物?
- 16. 什麼是Scala 2.8中.Net ArrayList可變類型的等價物?
- 17. Scala中x [i:]的等價物是什麼?
- 18. 什麼是以下VBScript的Jython或Python等價物?
- 19. 什麼是「pythonic」的Ruby等價物?
- 20. 什麼是Ruby中的「sys.stdout.write()」等價物?
- 21. 什麼是android中的dataWithContentsOfURL等價物?
- 22. RDFlib中rdf:ID的等價物是什麼?
- 23. Monotouch中的CGPDFDocumentGetCatalog等價物是什麼?
- 24. 什麼是C++中的instanceof等價物?
- 25. 什麼是VC7中的strtok_s等價物?
- 26. jquery中Ajax.updater的等價物是什麼?
- 27. 什麼是JSP中的sendmail等價物?
- 28. jQuery中Class.create()的等價物是什麼?
- 29. 什麼是MSTest中MbUnit.Framework.RowAttribute的等價物?
- 30. JQuery中innerHTML的等價物是什麼?
你能舉一個你想如何使用它們的例子嗎? – dhg