2016-08-30 40 views
1

如何在布爾表達式中使用「=>」運算符?例如,下面的聲明是錯誤的,因爲「ISOPEN = ISOPEN!」返回一個布爾值:在布爾表達式中使用=>運算符

// not a good function declaration 
void toggle => isOpen = !isOpen; 

我想類似這樣:

void toggle => shutUp(isOpen = !isOpen); 

shutUp()是一個函數,返回void值並接受任何布爾參數。

回答

2

像這樣:

var isOpen = false; 
var toggle =() => isOpen = !isOpen; 
toggle(); 
print(isOpen); 
toggle(); 
print(isOpen); 
+0

Thansk。這很奇怪,但它有效。 – Cequiel

+0

=> x是{return x; }。所以函數可以寫成:toggle()=> isOpen =!isOpen;和一個匿名函數是一樣的,只是沒有名字:()=> isOpen =!isOpen ;. [更多關於這裏。](https://www.dartlang.org/resources/dart-tips/dart-tips-ep-7) – Alvis

+0

這並不奇怪,它的工作原理。它與'bool toggle()=> isOpen =!isOpen;'幾乎相同,只是以更復雜的方式寫入。一種方法也可能不適用於方法 - 你不能用'var toggle'實現'void toggle()'方法簽名。我不建議使用此解決方案。 – lrn

1

達特語言允許使用表達爲函數。
此功能稱爲函數表達式。
該功能允許表達式可以有一個參數。

例子。

void main() { 
    var sum = (a, b) => a + b; // <==== function expression 
    for (int i = 0; i < 5; i++) { 
    print(sum(i, i)); 
    } 
} 

在這種情況下,詞位=>並不意味着運營商。它意味着一個標記函數體(函數表達式)開始的詞位。

這不是使用函數表達式的唯一可能的語法。這只是一個理解的例子。

1

您不應該使用=>作爲void函數。

As Mezoni寫道,=> e{ return e; }的簡寫符號。您不應該在無效函數中寫入return e,所以您也不應該使用=>

只要寫:

void toggle() { isOpen = !isOpen; }