2013-05-02 84 views
1

我正在將AS3代碼轉換爲Dart。我已經部分翻譯了以下,但我堅持如何處理AS3參數對象。任何指導?什麼是Dart相當於AS3參數對象?

void setLabelTextColors([int upColor = 0, int overColor = 0, int downColor = 0]) { 
    _lcUp = arguments.length > 0 ? upColor : -1; 
    ... 
} 

回答

0

從來沒有聽說過飛鏢的,但是這是代碼轉換

lcUp = -1 
if(upColor!=0){ 
    lcUp = upColor; 
} 
+0

Thi s是不正確的。如果調用setLabelTextColors()時未提供參數(arguments.length等於零),則_lcUp的值應爲-1。 – user2267395 2013-05-02 19:10:26

+0

其實,你錯了,upColor的默認值是0,這是第一個參數。因此,如果沒有參數傳遞給函數,那麼upColor將默認爲0,此時arguments.length也將爲0.在我的代碼中,lCUp將始終爲-1,直到upColor的值不等於0. – 2013-05-03 12:39:24

2

可以使用問號運營商,看是否參數已經給出與否。

void setLabelTextColors([int upColor = 0, int overColor = 0, int downColor = 0]) { 
    _lcUp = ?upColor ? upColor : -1; 
    ... 
} 
+0

Btw:問號運營商被一些開發者認爲是不好的風格(並且有關於再次移除它的討論)。其中一個原因是它很難包裝功能。 – 2013-05-02 21:37:02

0
void setLabelTextColors([int upColor, int overColor, int downColor]) { 
    int _lcUp = (upColor!=null) ? upColor : -1; 
    // ... 
} 

如果你的代碼之間的差異 「參數未提供」 和 「參數爲空」,你也可以用這個來代替:

void setLabelTextColors([int upColor, int overColor, int downColor]) { 
    int _lcUp = (?upColor) ? upColor : -1; 
    // ... 
} 

UPDATE 第二代碼片段在將來的某個時間點不再有效 - see this issue.