我正在寻找一种使用Ruby将空字符串转换为nil的方法。如果我最终得到一个空格的字符串,我可以做
" ".strip!
这会给我空字符串""。
我希望能做的就是这样。
" ".strip!.to_nil!
这将使用nil替换空字符串。 to_nil!如果它是.empty会直接将字符串更改为nil?否则,如果字符串不为空,则不会改变。
这里的关键是我希望它直接发生而不是通过诸如
之类的任务f = nil if f.strip!.empty?
答案 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
当然你也可以在检查字符串是否适合你之前去除字符串