31. 「ダミー実行」(2)
• ダミー実行は良し悪し
• ゴミ情報が波及することも
31
# ao.rb抜粋
class Vec
# このメソッドは使われない
def vadd(b) # b: any
Vec.new(
@x + b.x, # any
@y + b.y, # any
@z + b.z, # any
)
end
end
class Vec
@x: Float | any
@y: Float | any
@z: Float | any
# 今はチートコードを追加(広義の型注釈?)
if _ = false
v = Vec.new(0.0,0.0,0.0)
v.vadd(v)
end
vaddをanyで呼び出すので
@xにanyが記録される
記録されない特殊な
anyで解決できる?
32. 解析の診断機能
• pで型をrevealできる
• 「ここにどんな型が来ると思ってる?」とか調べる
• 解析到達経路をバックトレース風に表示する機能
32
def foo(n)
p n
end
foo(1)
foo("str")
# Revealed types
# reveal.rb:2 #=> Integer | String
# Classes
class Object
foo : (Integer | String) -> (Integer | String)
end