Typing Ruby̌^G[`FbNASY̊TvD

j

1.S̕^S̕ێ

S͕DDłCS͕ێD

2.RubỹZ}eBNXƂ̌݊

RubỹZ}eBNXƂ̌݊ɍlDȂ͖̂ƂāC
DTyping Rubyɂ`FbN̂߂ɁCRubyɂ͂Ȃ邱Ƃ͂
ȂD

Tv

--
def foo(x,y)
  x+y
end

foo(1,2)
--

́CvOłD

foo͂ƁCx+Ƃ\bhĂāCyT(x)#+̃p[^
Ȃ蓾邱Ƃ킩DTyping Ruby̓\Ō΁C

--
t0 = {foo : t1*t2 -> t3}

t1 < {+ : t4 -> t3}
t2 < t4
Integer < t1
Integer < t2
--

ƂȂD(<Subtype̋LD)

̐邱ƂɂāCt1t2Ɋւ鐧񂪂܂Ƃ߂C

--
Integer < {+ : t4 -> t3}
Integer < t4
--

ƂȂDInteger̒`́C

--
Integer = {+ : Numeric -> Numeric; ...}
--

Ƃ̂ŁC

--
Integer = {+ : Numeric -> Numeric; ...} < {+ : t4 -> t3}
--

邱ƂɂC

--
Integer < t3
t4 < Numeric
Integer < t4
--

Dt3̃VOl`Ɋւ͂Ȃ̂ŁCȏ̌؂͍s
(ȂĂǂ܂ފ֐polymorphicȊ֐łƌ)D
t4ɊւďsƁC

--
Integer < Numeric
--

D̓NXKwQƂ邱Ƃɂi邢́CInteger
Numeric̃VOl`̒`QƂ邱ƂɂjC鐧łD

ȏ̃vZXɂCL̃vOɎsł邱ƂD


----
$Date: 2005-02-07 19:06:25 +0900 (Mon, 07 Feb 2005) $
