有人可以解释一下这个非常奇怪的观察吗?
我一直试图从IronPython内部调用Rx扩展方法,结果证明它根本不可能.我把它归结为这个简单的例子:
import clr clr.AddReference("System.Core") from System.Linq import Enumerable def process(value): return Enumerable.Select(value, lambda x:x)
在这种情况下,我们从正常的LINQ开始.如果我process
使用数组或任何其他IEnumerable
对象从我的托管环境调用该函数,它的工作完全正常.
那么我试着简单地替换引用以使用Observable
扩展方法,如下所示:
import clr clr.AddReference("System.Reactive.Linq") from System.Reactive.Linq import Observable def process(value): return Observable.Select(value, lambda x:x)
在这种情况下,如果我process
用一个IObservable
对象调用该函数,则调用崩溃时会出现一条丑陋的错误消息:
expected IObservable[object], got Select[int, int]
有没有人遇到这样的事情?我错过了什么吗?是否有一些特殊情况黑客可以使缺少的Enumerable
lambda代理工作Observable
?我不得不承认我在这里完全不知所措.
顺便说一句,正如一个完整性检查,以下示例正常工作:
import clr clr.AddReference("System.Reactive.Linq") from System.Reactive.Linq import Observable def process(value): return Observable.Sum(value)
我想把它留在那里只是为了清楚问题确实在方法调用中Observable.Select
.