调用具有两个相同参数的函数,但在调用时设置第二个参数

问题描述:

我在调用一个需要两个参数的函数。我使用相同的变量,但在第二个参数中,我将此变量设置为另一个变量。 见下图:调用具有两个相同参数的函数,但在调用时设置第二个参数

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'的原因? –

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

评价为了通过评估s被发现"ii",然后第二个参数的值是分配的值s = 'oi2 - 它的计算结果为"oi2"(而不是,在技术上,通过读取变量,它只是在函数调用之前变量被写入相同的值)。

预计 - 如果任何实现做了别的事情,它就会被破坏。