誰かこの本当に奇妙な観測を教えてもらえますか?IronPythonスクリプトの中からlambdaを使ってRx拡張メソッドを呼び出すことはできますか?
私は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
オブジェクトを持つ私のホスティング環境から呼び出すと、まったく問題なく動作します。私はIObservable
対象とprocess
機能、醜いとのコールがクラッシュを呼び出す場合、この場合、
import clr
clr.AddReference("System.Reactive.Linq")
from System.Reactive.Linq import Observable
def process(value):
return Observable.Select(value, lambda x:x)
:
だから、私は単にObservable
拡張そうのようなメソッドを使用するように参照を交換してみましたエラーメッセージ:
expected IObservable[object], got Select[int, int]
は、誰もがこのような何かを思いついていますか?私は何かを逃したか? Observable
が存在しないラムダ代理人とEnumerable
の作業を行う特別なケースがありますか?私はここで完全に困惑していることを認めなければならない。ところで
import clr
clr.AddReference("System.Reactive.Linq")
from System.Reactive.Linq import Observable
def process(value):
return Observable.Sum(value)
私はそこにそれを残すためにちょうどそれが明確な問題が実際にメソッド呼び出しであることを確認したかったですObservable.Select
。
IronPythonリポジトリに[issue](https://github.com/IronLanguages/main/issues/1564)を追加しました。私はこれがIronPythonのメソッドコール解決のより一般的なバグであると考えていますが、この問題についてのさらなる洞察に感謝するでしょう。 – glopes