Может кто-нибудь, пожалуйста, объясните мне это действительно странное наблюдение?Можно ли вызвать методы расширения Rx с помощью lambdas внутри скрипта IronPython?
Я пытаюсь вызвать методы расширения Rx изнутри IronPython, и это оказывается просто невозможным. Я открутил его до этого простого примера:
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
работой с делегатами лямбды, что Observable
отсутствует? Я должен признать, что я здесь полностью озадачен.
Кстати, так же, как проверки вменяемости, следующий пример работает просто отлично:
import clr
clr.AddReference("System.Reactive.Linq")
from System.Reactive.Linq import Observable
def process(value):
return Observable.Sum(value)
Я хотел оставить его там просто чтобы понять, что проблема на самом деле в методе вызова Observable.Select
.
Я подал [вопрос] (https://github.com/IronLanguages/main/issues/1564) в хранилище IronPython с большим количеством выводов. Теперь я считаю, что это более общая ошибка с разрешением вызова метода IronPython, но по-прежнему будет лучше понимать проблему. – glopes