読者です 読者をやめる 読者になる 読者になる

Trivialな例ですみません

truby

クラス定義できるようになった。

class C
  def id(x)
    x
  end
end

x = C.new()
x.id(1)+2
x.id("a")+"b"
# x.id("a")+1             ⇒NoMethodError

rubyだとTypeErrorになるけど、Fixnumにto_strが定義されていないのでStringに変換できなくてエラーという扱い。

class C
  def plus(x,y)
    x+y
  end
end

a = C.new()
a.plus(1,2)
a.plus("a","b")
# a.plus("a",1)           ⇒NoMethodError

こちらも同じ。

ちなみに、ローカル変数をlet .. in ..みたいに変換してそこで多相になるという扱いなので、

def plus(x,y)
  x+y
end

とかトップレベルでやっても多相型になりません。こっちは、あと2週間くらいで何とかする。たぶんすると思う。するんじゃないかな。ま、あんまり期待しないでください。