【发布时间】:2014-11-04 04:24:36
【问题描述】:
如果你尝试在 和 @@> 符号之间包含一个通用函数,比如说
<@@ let f x = x in f 1 @@>
你得到以下编译错误:
带引号的表达式中不允许使用内部泛型函数。考虑添加一些类型约束,直到这个函数不再是通用的。
这是实现限制(缺少的功能尚未实现)还是概念问题(或两者兼而有之)?
编辑:为了澄清起见,即使使用符号 和 @> 键入引号也会发生相同的错误。
编辑 2:但是,您可以使用 ReflectedDefinitionAttribute 注释通用函数,其 AST 应该可以通过反射获得。
【问题讨论】:
-
有效吗? --> 分隔键入的代码引号。
-
不,你会得到同样的错误。
-
这只是一个例子吗?如果不是错误说明了一切 - 您可能不会使用内部函数来生成
<@@ let f (x : int) = x in f 1 @@> -
@Carsten König。我对此很清楚。谢谢。但是,我很想知道问题是否在于引用是如何实现的(即微软没有为通用函数实现引用),或者在概念上是不可能做到的。那么限制是关于引用的实现还是引用的概念?
-
如果你在某个会议上遇到了 Don,那么我肯定没有资格回答 你 任何问题 ;) - 我猜它使用
Expressing<Func<...>>内部函数,这当然不适用于泛型参数