class Tree def initialize*d;@d,=d;end def to_s;@l||@r?",>":@d;end def total;(@d.is_a?(Numeric)?@d:0)+(@l?@l.total: 0)+(@r?@r.total: 0);end def insert d alias g instance_variable_get p=lambda{|s,o|d.to_s.send(o,@d.to_s)&& (g(s).nil??instance_variable_set(s,Tree.new(d)):g(s).insert(d))} @d?p[:@l,:]:@d=d end end
有人愿意尝试解释这是做什么的吗?在我问到的代码是too clever的问题中,它似乎是一个答案.但是,对我来说,判断它是否只是一个笑话太聪明了.如果不是,我有兴趣知道它是如何工作的,如果有人愿意解释的话.
解决方法
编辑:发布原始混淆示例的人在答案中给出了
the actual source code.他还发布了一个
corrected version of the obfuscated code,因为正如我所说,即使你删除了时髦的语法,其中一些也没有意义.
这是一些很好的混淆代码.与大多数混淆代码一样,它主要是许多三元运算符,并且顽固地拒绝将正常人放入空格.这里写的基本上是相同的东西:
class Tree def initialize(*d) @d,= d # the comma is for multiple return values,# but since there's nothing after it,# all but the first are discarded. end def to_s @l || @r ? ",>" : @d end def total total = @d.is_a?(Numeric) ? @d : 0 total += @l.total if @l total += @r.total if @r end def insert(arg) if @d if @l @l.insert(arg) else @l = Tree.new(arg) end else @d = arg end end end
insert方法在语法上没有效果(它在一个部分缺少一个方法名称),但就我所知,这基本上就是它所做的.该方法的混淆非常厚:
>而不是仅仅执行@l = whatever,它使用instance_variable_get()和instance_variable_set().更糟糕的是,它将instance_variable_get()别名为g().>它将大多数功能包含在lambda函数中,并将其传递给@l的名称.然后它用func [arg1,arg2]的鲜为人知的语法调用这个函数,它相当于func.call(arg1,arg2).