将空字符串转换为nil到位?

时间:2013-03-14 20:14:04

标签: ruby

我正在寻找一种使用Ruby将空字符串转换为nil的方法。如果我最终得到一个空格的字符串,我可以做

 "    ".strip!

这会给我空字符串""。

我希望能做的就是这样。

"    ".strip!.to_nil!

这将使用nil替换空字符串。 to_nil!如果它是.empty会直接将字符串更改为nil?否则,如果字符串不为空,则不会改变。

这里的关键是我希望它直接发生而不是通过诸如

之类的任务
f = nil if f.strip!.empty?

3 个答案:

答案 0 :(得分:22)

The clean way is using presence.

Let's test it.

"    ".presence
# => nil


"".presence
# => nil


"text".presence
# => "text"


nil.presence
# => nil


[].presence
# => nil

Please note this method is from Ruby on Rails v4.2.7 https://apidock.com/rails/Object/presence

答案 1 :(得分:3)

这是不可能的。

String#squeeze!可以正常工作,因为可以修改原始对象以存储新值。但是值nil是不同类的对象,因此它不能由类 String 的对象表示。

答案 2 :(得分:2)

我知道我有点迟了但你可以为String类编写自己的方法,并在初始化器中运行代码:

class String
  def to_nil
    present? ? self : nil
  end
end

然后你会得到:

'a'.to_nil
=> "a"
''.to_nil
=> nil

当然你也可以在检查字符串是否适合你之前去除字符串