Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart JS中的命名参数编译等价物是什么?_Dart - Fatal编程技术网

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],
]);