TypedCoffeeScript v0.8.3 インターフェース継承、分割代入プロパティの追跡
これなきゃだめなやつだろと思ってインターフェース継承を実装してきた
mizchi/TypedCoffeeScript https://github.com/mizchi/TypedCoffeeScript
インターフェース継承
class宣言時にインターフェース継承ができる
class Point x :: Int y :: Int struct Size { width :: Int height :: Int } class Entity extends Object implements Point, Size e :: {x :: Int, width :: Int} = new Entity
x と width のプロパティを継承できている。代入時に型違反するとthrow もちろん、このコードでは実体がないのでアクセスしてもundefinedだが…あとでnullableの仕組みはいれたい。
分割代入
a :: String {a, b, c} = {a: "", b: 3, c: true}
左辺の分割代入をスコープに追加して追跡して型推論できるようにした
class X x :: Int f: ({@x, @y, @z})->
これもthisのスコープ内ではxはIntで、yとzは型不定ながら扱えるようになっている。
次やること
struct宣言周りを強化する
- ブレースの省略を可能に
- structもimplementsできるように
- struct宣言対象を、ネストした名前空間以下でできるように
- struct宣言すると元コードに無意味なIntを生成するバグを修正
つまりこれができる
struct A.X a :: Int struct A.Y implements A.X b :: String