什么?意思是红宝石

时间:2015-05-04 23:19:18

标签: ruby-on-rails ruby

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

prefix = root_dir.nil? ? nil : File.join(root_dir, '/')

这是包含代码行的块。

def some_name(root_dir = nil, environment = 'stage', branch)
        prefix = root_dir.nil? ? nil : File.join(root_dir, '/')
.
.
. 

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

3 个答案:

答案 0 :(得分:6)

以...结尾的功能? Ruby中的函数只返回一个布尔值,即true或false。

When you write a function that can only return true or false, you should end the function name with a question mark.

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

可以像这样重写:

if root_dir.nil?
  prefix = nil
else
  prefix = File.join(root_dir, '/')
end

答案 1 :(得分:2)

这称为三元运算符,用作if / else语句的一种缩写。它遵循以下格式

statement_to_evaluate ? true_results_do_this : else_do_this

很多时候,这将用于非常简短的if / else语句。您会看到这种语法是一堆基于C的不同语言。

答案 2 :(得分:1)

代码相当于:

if root_dir.nil? 
  prefix = nil 
else 
  prefix = File.join(root_dir, '/')
end

请参阅a previous question