vim script で、list をラップ
STL っぽく簡単に list をラップしてみた。
まぁこれぐらいなら素直に組み込み関数を使ったほうがいいのかな。
こういうのは需要があるのだろうか。
[ソース]
function! s:class_array(...) " 初期化 let self = {} " プロパティ let self.data = a:000 " メソッド function! self.to_list() return self.data endfunction function! self.to_string() return string(self.data) endfunction function! self.assign(list) let self.data = a:list endfunction function! self.size() return len(self.data) endfunction function! self.clear() let self.data = [] endfunction function! self.at(number) return self.data[a:number] endfunction function! self.insert(number, value) let self.data[a:number] = a:value endfunction function! self.erase(number) call remove(self.data, a:number) endfunction function! self.empty() return empty(self.data) endfunction function! self.pop_front() let self.data = self.data[1 : ] endfunction function! self.push_front(value) let self.data = [a:value] + self.data endfunction function! self.push_back(value) let self.data = self.data + [a:value] endfunction function! self.pop_back() let self.data = self.data[ : self.size()-2] endfunction return self endfunction let array = s:class_array(0, 1, 2, 3, 4) echo "to_list() -> ".array.to_string() call array.pop_front() echo "pop_front() -> ".array.to_string() call array.pop_back() echo "pop_back() -> ".array.to_string() call array.push_back(0) echo "push_back(0) -> ".array.to_string() call array.push_front(-1) echo "push_front(-1) -> ".array.to_string() echo "at(3) -> ".array.at(3) call array.insert(3, 10) echo "insert(3, 10) -> ".array.to_string() echo "size() -> ".array.size() call array.assign([5, 6, 2]) echo "assign([5, 6, 2]) -> ".array.to_string()
[出力]
to_list() -> [0, 1, 2, 3, 4] pop_front() -> [1, 2, 3, 4] pop_back() -> [1, 2, 3] push_back(0) -> [1, 2, 3, 0] push_front(-1) -> [-1, 1, 2, 3, 0] at(3) -> 3 insert(3, 10) -> [-1, 1, 2, 10, 0] size() -> 5 assign([5, 6, 2]) -> [5, 6, 2]