Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
连接到nil应该在Ruby中返回nil_Ruby_String_String Concatenation - Fatal编程技术网

连接到nil应该在Ruby中返回nil

连接到nil应该在Ruby中返回nil,ruby,string,string-concatenation,Ruby,String,String Concatenation,我需要生成一个由括号包围的字符串,但前提是它的值不是空的。目前我正在使用类似于: [5] pry(main)> a = nil => nil [6] pry(main)> a.nil? ? '' : "(#{a})" => "" [7] pry(main)> a = "world" => "world" [8] pry(main)> a.nil? ? '' : "(

我需要生成一个由括号包围的字符串,但前提是它的值不是空的。目前我正在使用类似于:

[5] pry(main)> a = nil
=> nil
[6] pry(main)> a.nil? ? '' : "(#{a})"
=> ""
[7] pry(main)> a = "world"
=> "world"
[8] pry(main)> a.nil? ? '' : "(#{a})"
=> "(world)"

但是我认为它是重复的。有更简单的方法吗?

您只需编写一个方法即可:

def bracketize(str)
  return '' unless (str)
  "(#{str})"
end

因为这清楚地表明了你在做什么,你不必在代码上到处盖章。

只需将代码放在一个方法中:

def parentheses(a=nil)
  a.nil? ? '' : "(#{a})"  
end 

仅供参考。
a.nil?
对于空字符串返回false,您可能需要一个.blank?@Mark
。blank?
是一个ActiveSupport方法,它没有标记为rails问题。@max Good point。
blank?
不是核心Ruby,但它的实现很有指导意义:
响应(:empty?)!!空的?:!self
吹毛求疵:是否将
括号括起来更合适(但更难拼写)?@muistooshort
添加\u round\u grabby\u things\u round\u一些\u文本
也许更长更具描述性的东西会更好;)这没关系,但是没有回答我的“有没有更简单的方法”的问题,因为仅仅为相同的逻辑创建一个方法并不是我要问的。不过,给了你有用的一票。我试图找到一种不同的方法(我唯一想到的是Visual Basic中的+vs&函数,它将空值或空值传播到连接中。更简单的方法是编写一个方法。更简单的方法是使此方法更易于访问,例如在
NilClass
String
上定义它,这样您就可以执行
s.bracketize
或其他操作Ruby是灵活的,允许用任何你认为合适的方法修改核心类。