2015-01-13 1 views
0

У меня есть этот кодПочему я могу добавить список в качестве аргумента, где он должен быть итерируемым объектом?

var list = ['arg1=val1', 'arg2=val2', 'arg3=val3']; 
var nlist = new List(); 
list.forEach((e) { 
    nlist.addAll(e.split('=')); 
}); 
print(nlist); 

addAll нужен аргумент Iterable. Но в этом случае e.split() возвращение List, а не Iterable.

Так почему я могу это сделать?

+2

Вы можете использовать 'NLIST = list.expand ((е) => e.split ('='));' в упрощать. –

ответ

2

List реализует Iterable и, следовательно, является Iterable (см https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart:core.List чуть ниже заголовка)

+1

В частности, Дарт поддерживает полиморфизм, и именно поэтому вы можете передать объект подтипа вместо супертипа. См. Http://en.wikipedia.org/wiki/Polymorphism_%28computer_science%29#Subtyping –