在 Dart 中,查看下面的代码,它是否对列表“按引用传递”,对整数“按值传递”?如果是这种情况,什么类型的数据将通过引用/值传递?如果不是这种情况,导致这种输出的问题是什么?
void main() {
var foo = ['a','b'];
var bar = foo;
bar.add('c');
print(aoo); // [a, b, c]
print(bar); // [a, b, c]
var a = 3;
int b = a;
b += 2;
print(a); // 3
print(b); // 5
}
Run Code Online (Sandbox Code Playgroud) 以下是我对java和python中类型和参数传递的理解:在java中,有原始类型和非原始类型。前者不是客体,后者是客体。在python中,它们都是对象。
在java中,参数是按值传递的,因为:原始类型被复制然后传递,所以它们肯定是按值传递的。非原始类型通过引用传递,但引用(指针)也是值,因此它们也通过值传递。在 python 中,唯一的区别是“原始类型”(例如,数字)不会被复制,而只是被当作对象。
根据官方文档,参数通过赋值传递。“通过分配”是什么意思?java中的对象和python的工作方式一样吗?什么导致差异(在java中通过值传递和在python中通过参数传递)?上面有什么错误的理解吗?
在这篇文章中:Flutter video_player dispose
我问如何处理一些东西,以便我可以再次使用它。提供的答案工作正常,但它给我留下了这个问题:
为什么这段代码按预期工作?例如,它处理旧实例videoController使用oldController
final oldController = videoController;
WidgetsBinding.instance.addPostFrameCallback((_) async {
await oldController.dispose();
_initController(link); //contains reassignment of videoController = VideoController.network(...)
});
Run Code Online (Sandbox Code Playgroud)
在 C 或类似语言中,需要使用指针(或者我应该说我的首选方式)。要传递引用,请为其分配一个新值,然后处理旧值。
我创建了一个常量列表变量,我想将其放入一个新的列表变量并修改其项目。但我收到一个错误Unhandled Exception: Unsupported operation: Cannot remove from an unmodifiable list
const List<String> constantList = [
'apple',
'orange',
'banana'
];
List<String> newList = [];
newList= constantList;
newList.remove('banana');
Run Code Online (Sandbox Code Playgroud)