2012-04-12 46 views
9

我看過飛鏢不支持函數重載。它是否支持操作符重載?如果是的話,會很友善,並以一個簡單的例子告訴我它是如何完成的。什麼是一些優勢等我是編程新手。 謝謝。飛鏢是否支持運算符超載

+0

你在哪裏讀過* Dart不支持函數重載*? – 2012-04-30 07:19:26

回答

14

是Dart確實支持運營商超載,使用運營商關鍵字,然後由您希望超載的運營商。下面的示例重載爲MyClass的對象==操作者:

class MyClass { 
    operator ==(MyClass other) { 
    // compare this to other 
    } 
} 

幾乎所有飛鏢內置運營商可以與幾個顯着的例外是賦值運算符= 和參考等價被重載運營商 === (不存在了)。

至於操作符重載的優勢,它可以讓你重用有一個衆所周知的語義如==+對您的對象的操作運營。例如,如果你有重載+然後操作者可以使用語法M1 + M2而不是更笨重m1.plus(平方米)

+0

可以告訴我,如果'其他'是什麼特別的東西,或者它可以被命名爲別的東西。像==(MyClass ggg) – 2012-04-13 01:05:21

+1

@MuhammadUmer其他可以被命名爲任何東西,它只是您所比較的類對象的參數名稱,即this == other或this + other – 2012-04-13 05:13:16

+0

參數是否必須是相同類型,或者是否可以創建Scala的List cons operator ::等操作符,其中左邊的類型是構成新頭的元素類型,而右邊的類型是List類型? – pohl 2012-10-26 15:56:12

6

爲了延長拉斯添加兩個矩陣矩陣類回答,您還可以使用內聯函數語法重載操作符。

class MyClass { 
    operator ==(MyClass o) => id == o.id; 
}