У меня есть List<String>
, и мне нужно изменить его на List<dynamic>
в Dart 2.
Сначала я попробовал этот код, но он не работает:
var str_list = ["aa", "bb"];
// fails - is not dynamic
// gives List<String>
List<dynamic> target_list_0 = str_list;
Позже я попробовал эти 2 способа:
// 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 как можно более чистым, не могли бы вы помочь?
Редактировать
@ matanlurey задал четкий пример, где нужен этот шаблон и как я его использую.
Я разрабатываю что-то вроде твиттера, но более сложное (не только #hashtags и @mentions, но и слова, имеющие внутреннюю структуру). Итак, я делаю некоторую модификацию исходного текста, затем разделяю его по пробелам (или скобкам) на слова, а затем проверяю слово за словом. Если слово особенное, я заменяю строку на карту (содержащую анализируемую информацию). Изменение происходит на месте в списке. И вот где это мне нужно 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 split
не улавливает его.