是否有一种更简单(更清洁)的方法将可选参数从一个函数传递到另一个函数而不是这样做:
void optional1({num x, num y}) {
if (?x && ?y) {
optional2(x: x, y: y);
} else if (?x) {
optional2(x: x);
} else if (?y) {
optional2(y: y);
} else {
optional2();
}
}
void optional2({num x : 1, num y : 1}) {
...
}
Run Code Online (Sandbox Code Playgroud)
我真正想要的是:
void drawImage(canvas_OR_image_OR_video, num sx_OR_x, num sy_OR_y, [num sw_OR_width, num height_OR_sh, num dx, num dy, num dw, num dh])
Run Code Online (Sandbox Code Playgroud)
至少我没有得到位置可选参数的组合爆炸,但我仍然希望有一些比if-else更简单的东西.
我有一些代码使用第一个答案中提出的解决方案(传播命名可选参数的默认值,但我无法检查该值是否由初始调用者提供).
我正在将一些Java代码移植到Dart,它大量使用这些类型的地图:
Map<Class<? extends SomeClass>, SomeOtherClass> map = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)
目前这在飞镖中似乎是不可能的.我知道有一个建议引入第一级类型:http://news.dartlang.org/2012/06/proposal-for-first-class-types-in-dart.html这将介绍
class Type {
@native String toString();
String descriptor(){...} // return the simple name of the type
}
Run Code Online (Sandbox Code Playgroud)
因此,在此提案实施之前,我创建了以下类:
class Type {
final String classname;
const Type(this.classname);
String descriptor() => classname;
}
Run Code Online (Sandbox Code Playgroud)
我需要它的类有一个简单的get方法
abstract Type get type();
Run Code Online (Sandbox Code Playgroud)
这样我可以使用我Type
就像我会使用真实Type
并稍后切换我只需要删除我的解决方法.
我的问题:是否有一些方法可以进行这种映射(我没有看到)或者我是否采用合理的解决方法直到Type
引入真正的类?
Dart 1.0的更新
它可以这样做:
var map = new Map<Type, SomeOtherClass>();
// either
map[SomeOtherClass] = new SomeOtherClass();
// or
var instance = new SomeOtherClass(); …
Run Code Online (Sandbox Code Playgroud) 有没有办法call()
从Dart 调用一个名为(在嵌套对象中)的JavaScript函数,还是必须等待call()
可能会删除特殊处理的Dart 2.0 ?
我有一个JS代理:
@JS()
class SomethingFancy {
external String call();
}
Run Code Online (Sandbox Code Playgroud)
但是,由于call()
可以将对象转换为函数,因此无法访问JS对象的函数.
如果可以,我会在Dart中更改方法的名称,但不支持package:js
:
/// By default the dart name is used. It is not valid to specify a custom
/// [name] for class instance members.
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
Uncaught Error: NoSuchMethodError: method not found: 'call$0' (J.getSomethingFancy$1$x(...).call$0 is not a function)
如果该函数不存在,则错误如下所示:
Uncaught Error: NoSuchMethodError: method not found: 'callMe' (receiver.callMe is not a function)
同一个对象上的其他函数工作得很好.