0

而不是

str.downcase!
str.gsub!(/\W/, "")

看来我应该能够连续使用多个破坏性的 String 方法:

str.downcase!.gsub!(/W/, "")

有时这可行,但有时会导致错误。

irb(main):001:0> str = "Foobar!"
"Foobar!"
irb(main):002:0> str.downcase!.gsub!(/\W/, "")
"foobar"
irb(main):003:0> str
"foobar"
irb(main):004:0> str.downcase!.gsub!(/\W/, "")
NoMethodError: undefined method `gsub!' for nil:NilClass
    from (irb):4
    from /usr/bin/irb:12:in `<main>'

为什么是这样?

4

1 回答 1

1

许多破坏性方法,包括,如果它们不改变任何东西,就会gsub返回。nil因此,链接它们通常不是一个好主意。而是使用

str.downcase!
str.gsub!(/\W/, "")

或者

str = str.downcase.gsub(/\W/, "")
于 2013-01-21T06:46:08.563 回答