[ruby-core:77663] [Ruby trunk Bug#12851] string.gsub!(/\W/, '').downcase! returns undefined method in some (listed) cases

From: tech@...
Date: 2016-10-18 17:31:31 UTC
List: ruby-core #77663
Issue #12851 has been updated by Mikhail A.

Description updated

----------------------------------------
Bug #12851: string.gsub!(/\W/, '').downcase! returns undefined method in some (listed) cases
https://bugs.ruby-lang.org/issues/12851#change-60936

* Author: Mikhail A
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin16]
* Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
Hi! Found this strange issue with gsub! and downcase! methods used together for a string. Example code:

~~~ ruby
def palindrome? (str)
  str.gsub!(/\W/, '').downcase!
  str == str.reverse
end

puts palindrome?("Madam, I'm Adam!")
~~~

**returns true.** Ok! But...!

if the given string is single word:

~~~ ruby
def palindrome? (str)
  str.gsub!(/\W/, '').downcase!
  str == str.reverse
end

puts palindrome?("abba")
~~~

it returns no method error.

hw1_string.rb:13:in `palindrome?': undefined method `downcase!' for nil:NilClass (NoMethodError)
	from hw1_string.rb:30:in `<main>'

If the code is refactored like this:

~~~ ruby
def palindrome? (str)
  str.gsub!(/\W/, '')
  str.downcase!
  str == str.reverse
end

puts palindrome?("abba")
puts palindrome?("Madam, I'm Adam!")
~~~

than it worked ok in **both** cases. Why?

I'm new to ruby, and, may be still misunderstood something, but seems that is really a bug. 



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next