我有一个List<String>,我需要在dart 2中把它改成List<dynamic>.

首先,我try 了此代码,但它不起作用:

var str_list = ["aa", "bb"];

// fails - is not dynamic
// gives List<String> 
List<dynamic> target_list_0 = str_list;

后来,我try 了以下两种方法:

// succeeds - is dynamic
// gives List<dynamic> 
var target_list_1 = [] + str_list;

// succeeds - is dynamic
// gives List<dynamic> 
var target_list_2 = List<dynamic>.from(str_list);

它是有效的,但我不确定这是解决问题的最好(或惯用)方法.我想把我的DART-2代码写得尽可能干净,你能帮我吗?

Edit

@matanlurey问了一个明确的例子,这个模式在哪里是必要的,以及我是如何使用它的.

我正在开发一些类似Twitter的东西,但更复杂(不仅仅是#话题标签和@提及,还有有内部 struct 的单词).因此,我对源文本进行了一些修改,然后用空格(或括号)将其分割成单词,然后逐个单词地判断.如果单词是特殊的,我会将字符串更改为映射(包含解析的信息).这一变化正在列表中就地发生.这就是我需要它dynamic的地方.我有这个源代码:

var split_regexp = new RegExp(r"[^\s\(\)]+|[\s\(\)]+");
var body_matches = split_regexp.allMatches(body_part);

var body = [] + body_matches.map(
    (m) => m.group(0)
).toList();

// ... processing it ...

目前,我正在用javascript重写它(我用python重写了它).这两种语言都能捕捉到我用来拆分单词的文本,这要容易得多:

// python
body = re.split(r"([\s\(\)]+)", body)

// javascript
body = body.split(/([\s\(\)]+)/g)

有没有可能用DART写得这么简单?我不这么认为--因为我需要拆分器空格(或拆分器圆括号或我的应用程序future 版本中的任何东西),而DART split无法捕捉到它.

推荐答案

List.from(...)将是今天最惯用的方式.事实上,如果您试图更改现有列表的类型,则为the style guide now recommends it:

// If you want to change the type, then calling List.from() is useful:

var numbers = [1, 2.3, 4]; // List<num>.
numbers.removeAt(1); // Now it only contains integers.
var ints = new List<int>.from(numbers);

尽可能地干净

如果是这样的话,你don't可能要List<dynamic>美元.如果您能给出清晰的示例,说明此模式在哪里是必要的,以及您如何使用它,可能会有所帮助.

Dart相关问答推荐

具有级联省道的三元算子的奇异行为

Dart:判断泛型函数的类型 T

对字母数字字符串数组进行排序

自定义主题无法正常工作

PageView.builder 给出水平视口被给出无界高度错误

Flutter:是否可以有多个 Futurebuilder 或一个 Futurebuilder 用于多个 Future 方法?

你如何在 Polymer 中调度和监听自定义事件?

ProcessException:进程C:\..\myapp\android\gradlew.bat异常退出:

Flutter:如何同步使用 SharedPreferences?

Flutter - 如何自动启用 AnimatedOpacity?

如何在 Flutter CustomPainter 中使用Bezier Curves绘制形状

如何在 Dart 中获取数字的长度?

Firebase 手机身份验证Flutter crash崩溃

Dart 有小部件库吗?

Dart:打印整数和字符串

VS Code 首选项的位置

使用 Dart 解析 URI 以提取查询参数

如何在 Dart 中执行相当于 setTimeout + clearTimeout 的操作?

在 Dart 中没有换行符的 print()?

在 DART 中创建泛型类型的实例