Я записал дерево в C# для обработки поисков на таблице, что 6 сегментированный ключ со случаями по умолчанию (если ключ [0] не существует, используйте случай по умолчанию и продолжите). Поиски были сделаны рекурсивно. Я попробовал словарь словарей словарей (и т.д.), и это стало слишком сложным очень быстро.
я также записал средство анализа формулы в C#, который оценил уравнения, сохраненные в дереве для получения корректного порядка оценки. Предоставленный это вероятно случай выбора неправильного языка для проблемы, но это было интересное осуществление.
я не видел многих примеров того, что люди сделали, а скорее библиотеки, которыми они пользовались. Надо надеяться, это дает Вам что-то для размышления о.
Вы ищете 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>
лямбда определяет замыкание, что означает, что он инкапсулирует среду, в которой он был, когда он был определен. Если вы хотите, чтобы вызывающим был self, просто определите обычный метод или, еще лучше, используйте блок.