オブジェクト指向
vimスクリプトでプロトタイプベースの書き方が出来たとは。
試しに今回は複素数オブジェクトを作ってみる。
let Complex={} function Complex.new(r,i) dict let obj=copy(self) let obj.real=a:r let obj.img=a:i return obj endfunction function Complex.add(other) dict let obj=copy(self) let obj.real=self.real+a:other.real let obj.img=self.img+a:other.img return obj endfunction function Complex.to_s() dict return (self.real).'+'.(self.img).'i' endfunction
以上をcomplex.vimに保存して、以下のコマンドを順に実行。
:so complex.vim :let a=Complex.new(1,2) :let b=Complex.new(3,4) :echo a.add(b).to_s()
すると、4+6iが表示される。
スクリプト版FizzBuzz
ドキュメントを見ていたらmapとかrangeとかが使えるのがわかったのでちょっと練習にFizzBuzzを書いてみた。
バッファに出力版
:call append(0,map(range(1,100),'!(v:val%15)?"FizzBuzz":!(v:val%3)?"Fizz":!(v:val%5)?"Bazz":v:val'))
バッファを汚さない版
:echo join(map(range(1,100),'!(v:val%15)?"FizzBuzz":!(v:val%3)?"Fizz":!(v:val%5)?"Bazz":v:val'),"\n")