private_method
私のモジュールのいくつかには、2 つのメソッドで特定のクラス型を実装するグローバル クラス インスタンスが含まれていますpublic_method
。
プログラム内MyModule.my_instance # public_method
のどこからでも利用できるようにしたいのですが、 .MyModule.my_instance # private_method
MyModule
私は次のことを試みました:
class type public_type = object
method public_method : int
end ;;
class type private_type = object
method public_method : int
method private_method : int
end ;;
let make_private : unit -> private_type = fun () -> object
method public_method = 0
method private_method = 0
end ;;
module type MY_MODULE = sig
val my_instance : public_type
end
module MyModule : MY_MODULE = struct
let my_instance = make_private ()
let _ = print_int (my_instance # private_method)
end
ただし、これによりエラーが発生します。
値が一致しません:
val my_instance : private_type
には含まれません
val my_instance : public_type
強制を手動で書くことができます:
module MyModule : MY_MODULE = struct
let my_instance = make_private ()
let _ = print_int (my_instance # private_method)
let my_instance = (my_instance :> public_type)
end
しかし、このような単純なもののためにコード サイズを 2 倍にしたくはありません。
なぜこれが起こるのか、どうすれば回避できるのかについて何か提案はありますか?