OCaml 对象实例变量解析
OCaml object instance variable resolution
我被这个咬了
class root = object
val bars = "123"
end
class derived bars = object
inherit root as super
method speak =
print_endline bars
end
let () =
let a = new derived "hello" in
a#speak
令人惊讶地打印出“123”而不是 "hello"。
1) 这是否意味着实例变量是通过首先查看最 class 的根来解析的?
2) 假设 1,是否可以确保实例变量从当前 class 向上解析到父 class? (我怀疑这是可能的,因为 "its just how objects work in OCaml")
3) 是否有编译器warning来防止,warn about this
我认为它只是
的变体
let f bars =
let bars = "123" in
print_endline bars
第二个值bars
隐藏了第一个。 inherit root
扩展为 val bars = "123"
并隐藏您的 bars
值。
你可以做什么来覆盖 bars
是
class derived x = object
inherit root as super
val bars = x
method speak =
print_endline bars
end
我被这个咬了
class root = object
val bars = "123"
end
class derived bars = object
inherit root as super
method speak =
print_endline bars
end
let () =
let a = new derived "hello" in
a#speak
令人惊讶地打印出“123”而不是 "hello"。
1) 这是否意味着实例变量是通过首先查看最 class 的根来解析的?
2) 假设 1,是否可以确保实例变量从当前 class 向上解析到父 class? (我怀疑这是可能的,因为 "its just how objects work in OCaml")
3) 是否有编译器warning来防止,warn about this
我认为它只是
的变体let f bars =
let bars = "123" in
print_endline bars
第二个值bars
隐藏了第一个。 inherit root
扩展为 val bars = "123"
并隐藏您的 bars
值。
你可以做什么来覆盖 bars
是
class derived x = object
inherit root as super
val bars = x
method speak =
print_endline bars
end