我有以下代码:
def conditional_map
->(condition, if_true, if_false) { condition ? if_true : if_false }.curry
end
map = conditional_map.(->(object){ object.is_a?(Hash) }, ->(object) { object.inspect }, ->(object) { object.class })
map.(5)
我希望输出为Fixnum,但我得到的是object.inspect结果。但是,如果我明确声明布尔条件并进行调用,如:
map = conditional_map.(5.is_a?(Hash), ->(object) { object.inspect }, ->(object) { object.class })
map.(5)
它运作得很好。知道为什么会这样吗?
答案 0 :(得分:2)
condition ? if_true : if_false
在上面,condition
是一个过程,因此它总是真实的。当你定义map
时,你执行了来自conditional_map的proc并返回由if_true
定义的proc(因为条件已满足)。因此,当您执行地图时,您将始终调用inspect
方法。这不是可行的方法。
conditional_map.(1,2,3) #=> 2, since 1 is true-like