0

下面是一个 Ruby 函数的一部分,它检查特定目录并在它不存在时创建它:

if Dir.exists?(dir_name) == false
  Dir.mkdir(dir_name)
end

我知道有一种更短的方法可以做同样的事情:

Dir.exists?(dir_name) ? return : Dir.mkdir(dir_name)

但是,我不能完全理解这一点。第二个命令的重要部分是? return :. 命令的第一部分有要检查的参数,最后一部分有要采取的行动,但我无法理解? return :. 如果我希望命令最后一部分中的操作在且仅当dir_name 已经存在时执行,我将使用什么来代替? return :

4

2 回答 2

3

你应该使用

Dir.mkdir(dir_name) unless Dir.exists?(dir_name)

unless <statement>是一样的if !<statement>。记住永远不要做一个比较布尔值和另一个布尔值的语句。

例如,增加第一个语句的可读性

if Dir.exists?(dir_name) == false

if !Dir.exists?(dir_name)

unless Dir.exists?(dir_name)

该行Dir.exists?(dir_name) ? return : Dir.mkdir(dir_name)使用三元运算符

return立即退出函数,通常返回一个类似的值,return "some value"但您也可以调用return退出函数并返回nil

长话短说,如果 dir 存在,三元版本会破坏函数,因此函数中的任何内容都不会发生。所以等价的实际上是

Dir.exists?(dir_name) ? nil : Dir.mkdir(dir_name)
于 2013-02-23T22:22:49.750 回答
2

这是另一种编写 if-else 的方式。

Condition ? IfTrue : IfFalse

所以,

Dir.exists?(dir_name) ? return : Dir.mkdir(dir_name)

是相同的:

if Dir.exists?(dir_name)
    return
else
    Dir.mkdir(dir_name)
end
于 2013-02-23T22:23:45.690 回答