所以我正在编写一个模块函数来转换' falsey'和' truthy'价值分为真和假。要做到这一点,我使用的是一个案例表达式,据我所知,它基本上只是a big elseif statement that uses the === function和===运算符being meant to be used for comparing sets。从Ruby documentation我可以在==和===之间找到的唯一区别是===可以被覆盖以比较类的后代。我也理解everything is a method call in ruby所以我们不能假设相等/包含方法是可交换的。
当使用case语句按类排序时我会猜到==和===的功能是相同的,但我发现当按类排序时,它们的case语句永远不会将我的输入放入正确的& #39;箱&#39 ;.那时我转而使用==它确实有效,所以我想知道为什么会这样,因为我正在比较我认为实际上是"苹果到苹果"比较。
module FirstTry
def self.to_boolean(uncertain_value, to_integer: false)
case uncertain_value.class
when String
value = ActiveRecord::Type::Boolean.new.cast(uncertain_value)
return 1 if to_integer == true && value == true
return 0 if to_integer == true && value == false
return boolean_value
when TrueClass
return 1 if to_integer == true
return true
when FalseClass
return 0 if to_integer == true
return false
when NilClass
return 0 if to_integer == true
return false
end
# I did not originally include this part of the code in the question
raise 'Conversion Failed: No rules for converting that type of input into a boolean.'
end
end
module SecondTry
def self.to_boolean(uncertain_value, to_integer: false)
if uncertain_value.class == String
boolean_value = ActiveRecord::Type::Boolean.new.cast(uncertain_value)
return 1 if to_integer == true && boolean_value == true
return 0 if to_integer == true && boolean_value == false
return boolean_value
elsif uncertain_value.class == TrueClass
return 1 if to_integer == true
return true
elsif uncertain_value.class == FalseClass
return 0 if to_integer == true
return false
elsif uncertain_value.class == NilClass
return 0 if to_integer == true
return false
end
# I did not originally include this part of the code in the question
raise 'Conversion Failed: No rules for converting that type of input into a boolean.'
end
end
答案 0 :(得分:2)
三等于display: none
在Ruby的===
表达式中被调用。我们发现能够表达以下内容很方便:
case
当然,这很方便,除非您实际上持有该类,而不是该类的实例。但是在您的示例中,您在case表达式中的对象上调用case object
when String
"object is an instance of String!"
when Enumerable
"wow, object is actually a bunch of objects!"
end
。只需取消该通话,您的案件就会被放入正确的箱子中。 :)