下面的行检查和执行了什么?
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, '/')
.
.
.
我知道'?'在红宝石中是检查是/否履行的东西。但我对上面的代码块中的用法/语法不是很清楚。
答案 0 :(得分:6)
以...结尾的功能? Ruby中的函数只返回一个布尔值,即true或false。
您给出的示例显示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