Обеспечьте значение для сам при использовании Proc#call

Я записал дерево в C# для обработки поисков на таблице, что 6 сегментированный ключ со случаями по умолчанию (если ключ [0] не существует, используйте случай по умолчанию и продолжите). Поиски были сделаны рекурсивно. Я попробовал словарь словарей словарей (и т.д.), и это стало слишком сложным очень быстро.

я также записал средство анализа формулы в C#, который оценил уравнения, сохраненные в дереве для получения корректного порядка оценки. Предоставленный это вероятно случай выбора неправильного языка для проблемы, но это было интересное осуществление.

я не видел многих примеров того, что люди сделали, а скорее библиотеки, которыми они пользовались. Надо надеяться, это дает Вам что-то для размышления о.

22
задан Tobias Cohen 13 November 2009 в 12:21
поделиться

2 ответа

Вы ищете instance_eval, который оценивает лямбду в контексте вызывающего объекта.

>> $p = proc { self }
=> #<Proc:0x95cece4@(irb):1 (lambda)>
>> class Dummy
>>   def test
>>     $p.call
>>   end
>> 
>>   def test1
>>     instance_eval(&$p)
>>   end
>> end

>> d = Dummy.new
=> #<Dummy:0x946f7c8>
>> d.test
=> main
>> d.test1
=> #<Dummy:0x946f7c8>
24
ответ дан 29 November 2019 в 04:23
поделиться

лямбда определяет замыкание, что означает, что он инкапсулирует среду, в которой он был, когда он был определен. Если вы хотите, чтобы вызывающим был self, просто определите обычный метод или, еще лучше, используйте блок.

1
ответ дан 29 November 2019 в 04:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: