Dart JS中的命名参数编译等价物是什么?
如果我说Dart JS中的命名参数编译等价物是什么?,dart,Dart,如果我说 void simple({foo: true, bar: false}){ print('$foo $bar'); } 它编译到 function simple(foo, bar) ... 还是将命名参数转换为只接受1对象作为包含object.foo和object.bar的参数。我查看了它生成的dart.js,但它似乎是从javascript编译程序的AST,这对我来说有点疯狂。经过一些研究后,我发现,比如说,已经完成了很多优化 但是,由于这种优化,编译器避免(正如我在实验中看
void simple({foo: true, bar: false}){
print('$foo $bar');
}
它编译到
function simple(foo, bar) ...
还是将命名参数转换为只接受1对象作为包含object.foo和object.bar的参数。我查看了它生成的dart.js,但它似乎是从javascript编译程序的AST,这对我来说有点疯狂。经过一些研究后,我发现,比如说,已经完成了很多优化 但是,由于这种优化,编译器避免(正如我在实验中看到的)在可能的情况下传递对象。我认为这是为了表现,但我不确定 因此,在大多数情况下,命名参数直接传递,并在编译期间解析 为了测试这一点,我编写了一个伪代码: 虚拟镖 代码的结果JS(没有生成所有内容) dummy.dart.js
正如您在这里所看到的,没有对象被传递到参数中,但是它们被直接替换。经过一些研究,我发现,正如所说的,已经完成了很多优化 但是,由于这种优化,编译器避免(正如我在实验中看到的)在可能的情况下传递对象。我认为这是为了表现,但我不确定 因此,在大多数情况下,命名参数直接传递,并在编译期间解析 为了测试这一点,我编写了一个伪代码: 虚拟镖 代码的结果JS(没有生成所有内容) dummy.dart.js
正如您在这里所看到的,参数中没有传递任何对象,但直接替换它们。您所说的“疯狂”是什么意思?它不应该是可读的JavaScript。目前正在进行大量的推广/优化。方法、函数甚至可能是内联的。你说的疯狂是什么意思?它不应该是可读的JavaScript。目前正在进行大量的推广/优化。方法、函数甚至可能是内联的。谢谢!我现在想知道传递给函数的类对象是否也分解为单个参数。这将是理想的,因为我一直希望javascript中有一个结构,而不是在需要向量时通过数组偏移量来访问对象。谢谢!我现在想知道传递给函数的类对象是否也分解为单个参数。这很理想,因为我一直希望javascript中有一个结构,而不是在需要向量时通过数组偏移量来访问对象。
import 'dart:math';
double calcFunc({int a, int b}) {
return (a * b / (a+b)) * (new Random().nextInt(100)) ;
}
String myFunc({int a: 0, int b: 0}) {
return "Numbers : ${a + calcFunc(a: a, b : b) * (new Random().nextInt(100))}";
}
void main() {
print("Func call: ${myFunc(a: 42, b: 24)}");
print("Func 2nd call: ${myFunc(a: 21)}");
}
["", "main.dart", , F, {
"^": "",
myFunc: function(a, b) {
var t1 = C.C__JSRandom.nextInt$1(100);
return "Numbers : " + (a + a * b / (a + b) * t1 * C.C__JSRandom.nextInt$1(100));
},
main: function() {
P.print("Func call: " + F.myFunc(42, 24));
P.print("Func 2nd call: " + F.myFunc(21, 0));
}
},
1],
]);