Ruby on rails 如何解决'false.blank?'rubyonrails中的'gotcha'问题?
我需要检查布尔变量的值是否已设置,通过检查它是否包含空字符串Ruby on rails 如何解决'false.blank?'rubyonrails中的'gotcha'问题?,ruby-on-rails,Ruby On Rails,我需要检查布尔变量的值是否已设置,通过检查它是否包含空字符串“或nil表示未设置值,另一个值如true或false表示已设置值 我尝试使用blank?但是Rails在blank?方法上有这个问题,当调用false时,它实际上会返回true false.blank?#返回真值 所以,当变量的值被设置为false时,它会给出值的假负值,就好像变量没有被设置一样 如何在RubyonRails中检查变量是否未设置(”,nil),或者是否已设置(true,false,0,1),我发现最简单的方法是在调用b
“
或nil
表示未设置值,另一个值如true
或false
表示已设置值
我尝试使用blank?
但是Rails在blank?
方法上有这个问题,当调用false
时,它实际上会返回true
false.blank?#返回真值
所以,当变量的值被设置为false时,它会给出值的假负值,就好像变量没有被设置一样
如何在RubyonRails中检查变量是否未设置(
”
,nil
),或者是否已设置(true
,false
,0
,1
),我发现最简单的方法是在调用blank?
之前先调用
[“”,“”,nil,false,true,0,1]。映射{val{val.to_.s.blank?}
#=>[真,真,真,假,假,假,假]
[编辑以首先给出此解决方案]:我认为最好的解决方案是明确说明:
def not_set?(x)
[nil, ''].include?(x)
end
这将比转换为字符串更有效,所有人都能清楚地理解,并涵盖了未来未知的意外输入
这是我最初的解决方案,更简洁、更ruby,但性能和健壮性较差:
请尝试my\u var.to\u s.empty?
我相信这涵盖了您感兴趣的所有六个案例:
puts " show unset (nil, '') "
puts ''.to_s.empty?
puts nil.to_s.empty?
puts " show set (true, false, 0, 1) "
puts true.to_s.empty?
puts false.to_s.empty?
puts 0.to_s.empty?
puts 1.to_s.empty?
收益率:
show unset (nil, '')
true
true
show set (true, false, 0, 1)
false
false
false
false
检查这个,我会说这是一个更干净的方法(我打赌它更快,因为它不需要创建字符串)。另外,blank?
实际上不是Ruby在true
和false
上定义的,Rails添加了这个方法(只是为了澄清,因为你的问题说它是Ruby的,但实际上不是Ruby的)。编辑:我错过了你想要将0和1也检测为集合的机会,这对那一点不起作用,@kosVandra。OP不希望它在数组或散列上工作……只希望是“”、nil、false和true。但是考虑到你的评论,我更强烈地感觉到我的答案中的is_set()
建议可能是最好的解决方案。它将涵盖所有需要的情况,包括特殊情况。(比如数组、散列或更奇怪的东西。)