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

Dart 使用两个相同的参数调用函数,但在调用时设置第二个参数,dart,Dart,我正在调用一个需要两个参数的函数。我使用相同的变量,但在第二个参数中,我将这个变量设置为另一个变量。 见下文: 这将打印“oi,oi2”。 我希望这一切发生。我正在属性中使用修改后的通知,如: set title(String n) { this.modified('title', _title, _title = n); } 然而,我想知道这是一个bug还是可以预期的 谢谢,Joes是一个字符串,它是通过值传递的,而不是通过引用传递的 aa(s, s = 'oi2'); 计算第一

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

这将打印“oi,oi2”。 我希望这一切发生。我正在属性中使用修改后的通知,如:

set title(String n) {
    this.modified('title', _title, _title = n);
}
然而,我想知道这是一个bug还是可以预期的


谢谢,Joe

s
是一个
字符串
,它是通过值传递的,而不是通过引用传递的

aa(s, s = 'oi2');
计算第一个参数
s
,即
'oi'

接下来计算
s='oi2'
,这意味着
s
获得
'oi2'
分配
然后将
s='oi2'
(即
'oi2'
)的结果作为第二个参数传递

aa(s,s='oi2')之后
s
具有值
oi2


另请参见

参数的求值顺序是从左到右的,因此您可以依赖求值
s
“ii”
找到的第一个参数的值,然后第二个参数的值是赋值
s='oi2
,其求值为
“oi2”
(从技术上讲,并不是通过读取变量,而是在调用函数之前用相同的值写入变量)


它是预期的-如果任何实现做了其他事情,它就被破坏了。

我不知道
title
getter是如何涉及的,或者预期的行为是什么?@GünterZöchbauer,getter只是一个title=>\u title。问题是,当我调用aa(\u title='oi',\u title='something other')),在aa中,第一个参数是'oi',第二个参数是'something other',但它们在调用者范围内都是'u title'。我想这没关系,对吧?这有点让人困惑,因为你在问题中使用了
s
而不是
title
。这就是为什么第一个参数在oi2
值的原因吗ode>aa()?我认为处理器将解析所有值,然后调用函数,使两个参数相同。我将使用此函数并保存一行代码。谢谢
aa(s, s = 'oi2');