我应该如何在生成类型提供程序中适当地为ProvidedConstructor
的InvokeCode
提供代码,以实现以下内容?
给定:
module Utils =
let someFun (s : string) (inst : obj) =
// Does something here...
()
我需要生成的类型能够有效地执行以下操作:
type NewGeneratedType () as self =
inherit BaseType ()
do
Utils.someFun "Foo" (box self)
我已经成功调用了基础构造函数,但不知道如何正确地切片实例并调用函数:
let ctor = ProvidedConstructor([])
let ci = baseType.GetConstructor(BindingFlags.Public ||| BindingFlags.Instance, null, [| |], null)
ctor.BaseConstructorCall <- fun args -> ci, args
// I do not know how to properly call this to match the constructor above
ctor.InvokeCode <- fun args -> <@@ () @@>
this
总是第一个。xs |> List.append x
等同于List.append x xs
,也等同于x::xs
。 - Sergey Tihon将表达式拼接到引号文字中时出现类型不匹配。插入的表达式树的类型与拼接操作所期望的类型不匹配。期望的是“NewGeneratedType”,但收到的类型是“System.Object”。考虑使用预期的表达式类型进行类型注释,...
我尝试的所有方法似乎都无法解决这个问题。 - Reed Copsey