Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 使用类型提供程序中的反射模拟RFC FS-1023_F#_Type Providers - Fatal编程技术网

F# 使用类型提供程序中的反射模拟RFC FS-1023

F# 使用类型提供程序中的反射模拟RFC FS-1023,f#,type-providers,F#,Type Providers,据我所知,只有基本类型可以作为参数提供给类型提供程序,因此您不能执行类似TypeProvider的操作,但可以执行TypeProvider。有没有什么方法可以用反射来模仿前者和后者 我们的想法是能够以某种方式创建新的类型,从而基于这些类型生成新的类型。例如,复制类型的简单类型提供程序可能会执行以下操作: type Foo={Str:string} 类型栏=类型提供程序 //Foo是一个字符串 这不能以任何合理的方式完成 主要问题是类型Foo在类型提供程序实例化时尚未编译,因此您无法通过反射访问它

据我所知,只有基本类型可以作为参数提供给类型提供程序,因此您不能执行类似
TypeProvider
的操作,但可以执行
TypeProvider
。有没有什么方法可以用反射来模仿前者和后者

我们的想法是能够以某种方式创建新的类型,从而基于这些类型生成新的类型。例如,复制类型的简单类型提供程序可能会执行以下操作:

type Foo={Str:string}
类型栏=类型提供程序
//Foo是一个字符串

这不能以任何合理的方式完成

主要问题是类型
Foo
在类型提供程序实例化时尚未编译,因此您无法通过反射访问它

类型提供程序可以以各种有趣的方式被滥用。如果你想看到他们中的大多数人,这也许是最冒险的例子——但我不确定它是否有一种方法可以满足你的要求


也就是说,没有什么可以阻止类型提供程序(如
Crazy
)查看磁盘,并试图在F#源代码中的某个地方找到
Foo
的类型定义。我想这可能会奏效。需要注意的是,您将只能获取源代码,因此您必须自己解析源代码并提取类型定义。

啊,好吧,那太遗憾了。希望在不久的将来,这样的功能将可用。假设您直接从源代码中获取它,那么它只能在简单的情况下工作。谢谢你的帮助!我可以想象,从源代码解析DU和记录是可以管理的。对于任何更复杂的类,我绝对不想这样做:)