2017-02-22 35 views
4

私は2つの引数を必要とする関数を呼び出している。私は同じ変数を使用しますが、2番目の引数でこの変数を別のものに設定します。 は、以下を参照してください:同じ引数を2つ使用して関数を呼び出すが、呼び出し中に2番目の関数を呼び出す

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

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

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

これは "OI2、大井" 印刷されます。 これが起こりたいです。これはバグとして見ることができるか、それが期待されている場合、私は疑問に思う、

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

しかし:私のような、プロパティ内で変更通知を使用しています。

おかげで、ジョー

+0

私は 'title'ゲッターがどのように関与しているのか、あるいは期待される振る舞いはなんですか? –

+0

@GünterZöchbauerのゲッターはtitle => _titleです。ポイントは、私がaa(_title = 'oi'、_title = '何か他のもの')を呼ぶとき、最初の引数は 'oi'であり、2番目は '他のもの'ですが、両方とも呼び出し側スコープ内の_titleです。これは大丈夫だと思いますよね? – Jonathan

+0

質問で 'title'の代わりに' s'を使うので、ちょっと混乱します。だから、最初のパラメータに 'aa()'の中に 'oi2'の値も割り当てられていないのはなぜですか? –

答えて

2

sではなく、参照によって、値によって渡されStringあります。

aa(s, s = 'oi2'); 

は、第2パラメータとして渡されs次いでs = 'oi2'の結果を
割り当て'oi2'を取得する手段'oi'
s = 'oi2'が評価される最初のパラメータsを、('oi2'である)を評価します。

aa(s, s = 'oi2');の後には、値oi2があります。

"ii"に評価sによって発見された引数を左から右にされ、あなたが最初の引数の値に頼ることができるようにするhttps://gist.github.com/floitschG/b278ada0316dca96e78c1498d15a2bb9

+0

私は、プロセッサがすべての値を解析してから関数を呼び出し、両方の引数を同じにすると考えました。これを使用して1行のコードを保存します。ありがとう – Jonathan

1

評価順序も参照して、第二引数の値が代入の値であり、 s = 'oi2 - これは"oi2"と評価されます(技術的には、変数を読み込むことによって、関数が呼び出される前に変数が同じ値で書き込まれます)。

いずれかの実装が何か他のことを行うと、それは壊れていると予想されます。