当前位置:  开发笔记 > 编程语言 > 正文

为什么在使用"include?"搜索子字符串时不使用简写"if"语法进行评估?

如何解决《为什么在使用"include?"搜索子字符串时不使用简写"if"语法进行评估?》经验,为你挑选了1个好方法。



1> Eric Duminil..:

这是一个优先问题.

你需要 :

puts "test".include?("s") ? "yep" : "nope"
#=> yep
为什么?

不带括号的方法调用位于优先级表之间defined?和之间or,因此它低于三元运算符.这意味着

puts "test".include? "s" ? "yep" : "nope"

被解析为

puts "test".include?("s" ? "yep" : "nope")

是的

puts "test".include?("yep")

是的

false
警告
"s" ? "yep" : "nope"

显示警告:

warning: string literal in condition

因为三元运算符需要一个布尔值,而String总是很简单.

1> 2

这是有效的原因

puts 1>2 ? "1 is greater than 2" : "1 is not greater than 2"

是三元运算符的优先级高于put:

puts ( 1>2 ? "1 is greater than 2" : "1 is not greater than 2" )

评估为:

puts ( "1 is not greater than 2" )
最后一个提示

如果您有优先级问题,使用puts不带括号可能只会使问题变得更糟.您可以启动IRB并直接查看结果.

这是一个例子:

# in a script :
puts [1,2,3].map do |i|
  i * 2
end
#=> #

IRB:

[1,2,3].map do |i|
  i * 2
end
# => [2, 4, 6]


这个答案正在变成一部史诗.爱它.
推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有