2017-02-22 54 views
4

我在調用一個需要兩個參數的函數。我使用相同的變量,但在第二個參數中,我將此變量設置爲另一個變量。 見下圖:調用具有兩個相同參數的函數,但在調用時設置第二個參數

https://dartpad.dartlang.org/2156442de07f56d90b430bc67f3461ac

void main() { 
    String s = 'oi'; 

    aa(s, s = 'oi2'); 
} 
void aa(String buf, String buf2){ 
    print('$buf, $buf2'); 
} 

這將打印 「OI,OI2」。 我想要這樣的事情發生。我正在使用屬性中的修改通知,如:

set title(String n) { 
    this.modified('title', _title, _title = n); 
} 

但是,我不知道這是否可以看作是一個錯誤或它是預期的。

感謝,喬

+0

我不明白'title' getter是如何涉及的或者期望的行爲是什麼? –

+0

@GünterZöchbauer,吸氣只是一個標題=> _title。關鍵是,當我呼叫aa(_title ='oi',_title ='something else')時,在第一個參數中是'oi',第二個是'別的東西',但它們在調用者範圍內都是_title 。我想這是正確的,對吧? – Jonathan

+0

這個問題有點令人困惑,因爲你在問題中使用's'而不是'title'。那麼這就是爲什麼第一個參數沒有在'aa()'裏面賦值'oi2'的原因? –

回答

2
s

是其由值來傳遞,而不是通過引用一個String

aa(s, s = 'oi2'); 

評估第一參數s,這是'oi'
s = 'oi2'被評估,這意味着s獲取分配'oi2'
然後s = 'oi2'的結果(這是'oi2')作爲第二參數傳遞。

aa(s, s = 'oi2');s之後的值爲oi2

參見參數的操作是由左到右,所以你可以依靠的第一個參數的值https://gist.github.com/floitschG/b278ada0316dca96e78c1498d15a2bb9

+0

我認爲處理器會解析所有的值,然後調用函數,使兩個參數相同。我將使用它並保存一行代碼。謝謝 – Jonathan

1

評價爲了通過評估s被發現"ii",然後第二個參數的值是分配的值s = 'oi2 - 它的計算結果爲"oi2"(而不是,在技術上,通過讀取變量,它只是在函數調用之前變量被寫入相同的值)。

預計 - 如果任何實現做了別的事情,它就會被破壞。

相關問題