小编Den*_*low的帖子

如何选择性地传递可选参数?

是否有一种更简单(更清洁)的方法将可选参数从一个函数传递到另一个函数而不是这样做:

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更简单的东西.

我有一些代码使用第一个答案中提出的解决方案(传播命名可选参数的默认值,但我无法检查该值是否由初始调用者提供).

dart

7
推荐指数
1
解决办法
1509
查看次数

在Dart中按类映射

我正在将一些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)

dart

6
推荐指数
1
解决办法
866
查看次数

如何从dart调用名为`call`的JavaScript函数

有没有办法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)

同一个对象上的其他函数工作得很好.

dart dart-js-interop

6
推荐指数
1
解决办法
292
查看次数

标签 统计

dart ×3

dart-js-interop ×1