我有一个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
无法捕捉到它.