作者macbuntu (邀怪)
看板PLT
标题Re: [问题] 如何处理 conditional operator
时间Fri Mar 20 22:49:27 2009
※ 引述《scwg ( )》之铭言:
: 在 unify 两个的时候 class part 取 least upper bound, interfaces 取教交集
: ==> b ? new X() : new Y() has type: A & N1 & N2
: 然後再去 method resolution, 这步没那麽难,
: 一样把名字和 parameter 数目都对的拿出来,
: 每一个 parameter 跟 class & interface1 & interface2 ...
: 比较, 可以的留下, 然後再一样找 most specific method
: 在这个例子里两个 func 都可以 -- 这个 type 是 A 也有 implement N2
: 但是 A 和 N2 没有 assignment 关系, 於是可能性不唯一, report error.
Mmm... 这样好像比较了解要怎麽做了, 所以基本上一定还是要找出 unify set,
也就是 { A, N1, N2 }, 然後在搜寻 compatible methods 的阶段,
只要 formal paramter type T 跟对应位置的 expression unify set S
有 T.isAssignableFrom( anyOf{S} ) 的关系, 那个 method 就算是
compatible method. 最後再用原本的 algorithm 找出 most specific method,
看看是不是唯一. 这样对吧?
这样还是可以在 linear time 找出 compatible methods, 感觉又变简单了, 真好.
但这也表示所有 expression 的结果型别都不是唯一, 而必须是一个 Set...
我的程式有得改了 @_@
: 话说越写越觉得跟我想做但是做不下去的 contraint existential types 很像 XD
^^^^^^^^^^^^^^^^^^^^^^^^^^^
这是什麽啊?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.32.132.21