什么 ?意思是红宝石

OK9*_*999 2 ruby ruby-on-rails

下面的行检查和执行什么?

prefix = root_dir.nil? ? nil : File.join(root_dir, '/')
Run Code Online (Sandbox Code Playgroud)

这是包含代码行的块.

def some_name(root_dir = nil, environment = 'stage', branch)
        prefix = root_dir.nil? ? nil : File.join(root_dir, '/')
.
.
. 
Run Code Online (Sandbox Code Playgroud)

我知道'?' 在红宝石中是检查是/否履行的东西.但我对上面的代码块中的用法/语法不是很清楚.

小智 6

最终的功能?Ruby中的函数只返回一个布尔值,即true或false.

当您编写只能返回true或false的函数时,您应该使用问号结束函数名称.

您给出的示例显示了一个三元语句,它是一行if语句..nil?是一个布尔函数,如果值为n则返回true,否则返回false.它首先检查函数是否为true或false.然后执行if/else来赋值(如果.nil?函数返回true,则它将nil作为值,否则它将获得File.join(root_dir, '/')as值.

它可以像这样重写:

if root_dir.nil?
  prefix = nil
else
  prefix = File.join(root_dir, '/')
end
Run Code Online (Sandbox Code Playgroud)