簡體   English   中英

Scala中有諸如類方法之類的東西嗎?

[英]Are there such thing as class methods in Scala?

許多oo語言為類方法和類變量提供了一定的便利。 例如Ruby允許使用元類。 在Scala中以類似的方式查看伴侶對象是否公平?

在Scala中以類似的方式查看伴侶對象是否公平?

是的,這是考慮它們的合理方法。

在JVM上,類的含義不同於在Ruby或其他動態語言中的對象。 當然,您可以將類的表示形式表示為類Class[_]的特殊對象,但是它主要用於反射,例如,不能具有自定義方法。 但是,JVM具有與類相關聯的靜態方法和字段的概念,並且不需要使用該類的對象:

public class SomeClass 
    public static int add(int x, int y) { return x + y; }
}

public class OtherClass {
    public static void main() {
        int z = SomeClass.add(1, 2);
    }
}

這些方法和字段本質上是“全局”的(除非我們考慮使用類加載器機制),例如,方法不能在子類中覆蓋。

Scala不允許您直接定義和使用靜態-語言中沒有“靜態”的概念。 但是,在Scala中,您可以定義可用於模擬靜態字段和方法的單例對象,同時它們比靜態函數強大得多,例如,它們可以參與繼承。 在內部,這些對象是Scala編譯器為您生成的特殊類的實例。

Scala還具有一種特殊的此類單例對象,稱為伴侶對象,它們與某些類共享名稱:

class SomeClass

object SomeClass

國內這些對象是完全不同的類比的情況下SomeClass (它可以作為訪問SomeClass.type ),但斯卡拉對待他們特殊的方式,例如,你可以訪問SomeClass私人會員SomeClass同伴對象,反之亦然。 伴隨對象還提供其他隱式作用域。 但是, SomeClass.typeSomeClass是完全不同的類。

簡而言之,是的,您可以將伴隨對象視為“類”方法和字段的容器,但僅在某種程度上。 伴侶對象無論如何都不是元類。 它們具有完全不同的語義和實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM