F# 从静态ProvidedMethod返回ProvidedType
我有一个ProvidedType,foo,它在内部表示为映射。此类型上提供了一些属性,这些属性应返回字典中成员的值 我想从另一个提供的类型上的静态方法返回此providedtype的实例。我假设我可以通过返回地图的一个实例来实现这一点:F# 从静态ProvidedMethod返回ProvidedType,f#,type-providers,F#,Type Providers,我有一个ProvidedType,foo,它在内部表示为映射。此类型上提供了一些属性,这些属性应返回字典中成员的值 我想从另一个提供的类型上的静态方法返回此providedtype的实例。我假设我可以通过返回地图的一个实例来实现这一点: let m = ProvidedMethod(nm, [], foo, IsStaticMethod = true) m.InvokeCode <- fun args -> <@@ [
let m =
ProvidedMethod(nm, [], foo, IsStaticMethod = true)
m.InvokeCode <- fun args ->
<@@
[|
"foo", box "abc"
"bar", box 123
|] |> Map
@@>
如何正确执行此操作?这取决于您所说的内部表示为映射的意思。如果您的意思是提供的类型的基本类型是Map,那么您所拥有的应该按原样工作。另一方面,如果您的意思是基类型是obj,但在运行时保持不变,即这是一个映射,那么您需要在引号中插入强制转换:
<@@
let fieldmap = ((%%(args.[0]) : obj) :?> Map<string,obj>)
fieldmap.[fieldName]
@@>
谢谢,原来是打字错误。我把基类型放在了错误的providedtype:P上
<@@
let fieldmap = ((%%(args.[0]) : obj) :?> Map<string,obj>)
fieldmap.[fieldName]
@@>