在连接之前检查nil字符串

Zom*_*ies 16 ruby code-formatting

这个问题类似于很多问题,但不是这样的任何重复问题.这个问题是关于字符串连接和编写比检查nil/zero更好的代码.

目前我有:

file.puts "cn: " + (var1.nil? ? "UNKNOWN" : var1)
Run Code Online (Sandbox Code Playgroud)

哪个工作正常,但看起来不太好.有什么更好的方法在ruby中写这个,以便我检查nil而不是连接它

Pet*_*ter 42

你可以这样做:

file.puts "cn: " + (var1 || "UNKNOWN")
Run Code Online (Sandbox Code Playgroud)

或者,如果您愿意,同样如下:

file.puts "cn: " + (var1 or "UNKNOWN")
Run Code Online (Sandbox Code Playgroud)

或者我最喜欢的,我认为这是最惯用的红宝石:

file.puts "cn: #{var1 or 'unknown'}"
Run Code Online (Sandbox Code Playgroud)

  • 如果var1是'false`,你会看到'unknown'. (7认同)

use*_*245 9

使用join添加这可能是字符串nil.

join不会抱怨,如果有一个nil

例如:

["a","b",nil,"c"].join("") 
#=> abc
Run Code Online (Sandbox Code Playgroud)

但是,如果您要加入除空字符串之外的任何内容,例如下划线,您将获得nil值的连接字符串:

["a","b",nil,"c"].join("_")
#=> a_b__c
Run Code Online (Sandbox Code Playgroud)

要解决此问题,请使用.compactnilArray加入之前删除值:

["a","b",nil,"c"].compact.join("_")
#=> a_b_c
Run Code Online (Sandbox Code Playgroud)

  • @pseudo` ["a","b",nil,"c"].compact.join("_")`解决问题 (2认同)

Jul*_*che 6

使用 ruby​​ 2.4.1,to_s解析nil"Hello"。所以var1.to_s应该够了。

2.4.1 :058 > nil.to_s
 => "" 
2.4.1 :059 > "hello".to_s
 => "hello" 
Run Code Online (Sandbox Code Playgroud)