else if
过elsif
?elsif
因为它遵循Ruby的打字约定?这是从书中获取的一段代码.我添加了额外的end
关键字和交换elsif
关键字与else if
s.
def describe(inhabitant)
if inhabitant == "sophie"
puts 'gender: female'
puts 'height: 145'
else if inhabitant == "paul"
puts 'gender: male'
puts 'height: 145'
else if inhabitant == "dawn"
puts 'gender: female'
puts 'height: 170'
else if inhabitant == "brian"
puts 'gender: male'
puts 'height: 180'
else if
puts 'species: Trachemys scripta elegans'
puts 'height: 6'
end
end
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
这让我意识到这是多么丑陋else if
.
Yu *_*Hao 63
你可以使用else if
它,它是安全的.但请注意,这意味着需要额外的end
关键字.
if n == 1
puts "foo"
elsif n == 2
puts "bar"
end
Run Code Online (Sandbox Code Playgroud)
在逻辑上是相同的:
if n == 1
puts "foo"
else if n == 2
puts "bar"
end
end
Run Code Online (Sandbox Code Playgroud)
或等效的:
if n == 1
puts "foo"
else
if n == 2
puts "bar"
end
end
Run Code Online (Sandbox Code Playgroud)
one*_*ree 16
TL; DR -更换elsif
带else if
是不行了只有2路径的条件.记得关闭if
创建的第二个条件else if
.最好的做法是尽可能少地使用条件级别,从而制定一种不太复杂的方法.在谨慎和使用方面是错误的elsif
.
根据您计划编写方法的方式,else if
可能会有效.然而,进入并不是一个好习惯.
以下面的例子为例.只有两个条件.第二个条件看起来类似于elsif
,但被解释为第二个代码块:
# What you may want to write
if true
puts 'true'
else if false
puts 'false'
end
# How Ruby requires it
if true
puts 'true'
else
if false # You may also do: puts 'false' if false
puts 'false'
end
end
Run Code Online (Sandbox Code Playgroud)
第一个块将搜索另一个块end
以关闭主条件.请注意,您可以使用单行if
语句绕过额外的结尾.(如果执行的代码可以写在一行上,我只建议这样做.)
重要的是要注意,一旦你声明了一个else
,你可能没有其他条件在同一层else
.鉴于上面的第二个例子,第二个例子if
嵌套在else
.如果您要打电话else
或elsif
与初始电话处于同一层else
,则条件将失败.
这是您不想实现的时间else if
:
def describe(inhabitant)
if inhabitant == "sophie"
puts 'gender: female'
puts 'height: 145'
elsif inhabitant == "paul"
puts 'gender: male'
puts 'height: 145'
elsif inhabitant == "dawn"
puts 'gender: female'
puts 'height: 170'
elsif inhabitant == "brian"
puts 'gender: male'
puts 'height: 180'
else
puts 'species: Trachemys scripta elegans'
puts 'height: 6'
end
end
Run Code Online (Sandbox Code Playgroud)
请注意,这两个elsif
语句都不能else if
以干净的方式"转换"为.
更新:感谢Stefan,你仍然可以使用else if
,导致一个非常嵌套的方法.
https://gist.github.com/sos4nt/a41b36d21f6eec5e0a42
归档时间: |
|
查看次数: |
32181 次 |
最近记录: |