2012-05-20 3 views
1

Все еще нахожу мои ноги с Haxe, и я ищу способ иметь массивную коллекцию только для чтения, которую я могу указать тип во время компиляцииКак получить типизированную структуру только для чтения с произвольным доступом

Так в идеале мне нужно что-то вроде следующего:

var collection:Collection<ItemType>; 

var item:ItemType = collection[3];//or 
var other:ItemType = collection.getAt(3); 

//also, it would be good if it was iterable 
for (item in collection) 
{ 
//stuff 
} 

Таким образом, так же, как массив, но только для чтения. Пожалуйста, кто-нибудь сможет дать мне несколько указателей.

Большое спасибо

+0

Когда вы говорите только чтение, вы имеете в виду, что оно определено во время компиляции и не может быть изменено? Или что он определен объектом и не может быть изменен другим объектом? Интересный вопрос, хотя :) –

+0

Привет, Джейсон. Я имею в виду определенный объект во время выполнения, который хочет только открыть доступ только для чтения к другому объекту. – tarling

+0

Параметры типа Ah-ha, вероятно, являются ключевыми - см. Http://haxe.org/ref/type_params. Я отправлю код, когда я окончательно скомпилирую ... – tarling

ответ

2

Ну, вы не можете иметь доступ только для чтения массива как такового, но вы можете сделать это с помощью методов:

class ReadonlyArray<T> { 
    var source:Array<T>; 
    public function new(source) this.source = source 
    inline function get(index) return source[index] 
    inline function iterator() return index.iterator() 
} 

над головой должно быть едва заметным.