【发布时间】:2013-07-31 11:52:03
【问题描述】:
我正在尝试用 sub 替换 nil 值,但它没有发生。我哪里错了。
a=""
a.sub!(//,"replaced")
puts a #=> "replaced"
b=nil
b.to_s.sub!(//,"replaced") #tried => (b.to_s).sub!(//,"replaced") but didnt work
puts b #=> nil
我错过了什么?
【问题讨论】:
-
零就是零:没有什么可以替代的。
-
@dave:
b.to_s.nil? => false -
显然,你把它变成了不是 nil 的东西——一个 nil 对象的字符串表示。我想我错过了你的观点。重要的是
nil.nil?。仅仅因为你可以在某个东西的强保留中进行替换并不意味着它会反映在原始对象中——to_s可以返回它想要的任何东西。 -
我正在尝试用一个值(就地)替换一个 var。当 var 具有空字符串并且将
nil转换为字符串(空字符串)时,我会看到不同的行为。 -
因为
nil为零,而不是字符串。我不明白这个问题。如果你希望b不是 nil,你需要设置它。 Nil 的 to_s 返回一个新字符串,其中包含“nil”。正如我所说,to_s 可以返回 anything,一般来说,对那个字符串做事不会影响底层对象。
标签: ruby string substitution