Dart:为什么基元类型的行为类似于引用类型?

Dart:为什么基元类型的行为类似于引用类型?,dart,Dart,请看以下代码: void main(){ int i=10; var someFunc=(){ int ni=i; 印刷品(ni) }; i=20; someFunc();//20 } 此代码将打印20,但为什么?为什么在这种情况下基元类型的行为类似于引用类型?这一行 int ni = i; 在调用someFunc()之前不会执行,因此int ni将保存的唯一值是调用someFunc()之前分配给int i的最后一个值 换句话说,int ni不是指向i的指针(引用类型),它只是在调用some

请看以下代码:

void main(){
int i=10;
var someFunc=(){
int ni=i;
印刷品(ni)
};
i=20;
someFunc();//20
}
此代码将打印20,但为什么?为什么在这种情况下基元类型的行为类似于引用类型?

这一行

int ni = i;
在调用
someFunc()
之前不会执行,因此
int ni
将保存的唯一值是调用
someFunc()
之前分配给
int i
的最后一个值


换句话说,
int ni
不是指向
i
的指针(引用类型),它只是在调用
someFunc()

之前不会更新其值(
ni

void main() {
    int i = 10;
    var someFunc = () {
        int ni = i;  // gets the current value of i in main
        print(ni);
        i = 25;     // changes the value of i in main
    };
    i = 20;
    someFunc();    // prints 20
    print(i);      // prints 25 (since someFunc changed value)
    i = 30;   
    someFunc();    // prints 30
}
为i打印的不同值是因为Dart使用词法范围。作用域控制代码其他部分对变量的访问和可见性。在Dart中,使用大括号{创建新的子范围。子范围可以访问父范围中的变量

函数someFunc创建了一个子作用域,该子作用域可以访问父作用域(main)中的变量。因此,当我更改时,someFunc可以访问此更改。
(更多示例:)

当我们多次调用myFunc并在调用之间更改i时,这种解释不起作用。例如,i=10;someFunc();i=20;someFunc()。输出为:10和20。我想原因是Dart依赖于我在回答中提到的词法范围。这正是我所说的,
someFunc()
将打印您在调用之前分配给
i
的最后一个值,因为
someFunc()
可以访问
i
。您的回答比我的回答更具技术性,但我认为我们讨论的是相同的。抱歉,我想我误解了您的解释。我以为您暗示根本没有使用包括i在内的引用。