Forum: Ruby "str1" == "STR1" case insensitive

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Shea M. (Guest)
on 2006-03-21 20:59
(Received via mailing list)
For doing case insensitive comparisons, I have been using

if str1.casecmp(str2)==0
	puts 'equal'
else
	puts 'not equal'
end

Is their a way to do this with simpler syntax?

~S
Jacob F. (Guest)
on 2006-03-21 21:06
(Received via mailing list)
On 3/21/06, Shea M. <null@void.0> wrote:
> For doing case insensitive comparisons, I have been using
>
> if str1.casecmp(str2)==0
>         puts 'equal'
> else
>         puts 'not equal'
> end
>
> Is their a way to do this with simpler syntax?

I find String#downcase convenient for these sorts of comparisons:

  if str1.downcase == str2.downcase
    puts 'equal'
  else
    puts 'not equal'
  end

Jacob F.
13 (Guest)
on 2006-03-21 21:25
(Received via mailing list)
Hi,

My suggestion is to write a simple convinience method such as:

def are_equal(str1, str2)
  str1.casecmp(str2) == 0
end

irb(main):023:0> if are_equal('foo', 'Foo')
irb(main):024:1>   puts 'equal'
irb(main):025:1> else
irb(main):026:1*   puts 'not equal'
irb(main):027:1> end
equal

--
Martins
Peter E. (Guest)
on 2006-03-21 21:38
(Received via mailing list)
class String
  def eq(arg)
    self.casecmp(arg ) == 0
  end
end

puts "Test".eq("test")
> true
ChrisH (Guest)
on 2006-03-21 21:58
(Received via mailing list)
Peter E. wrote:
> class String
>   def eq(arg)
>     self.casecmp(arg ) == 0
>   end
> end
>

Or you could say:

class String
  alias eq casecmp
end
Peter E. (Guest)
on 2006-03-21 22:13
(Received via mailing list)
indeed good idea, but it's not the same:

class String
  alias eq2 casecmp
  def eq1(arg)
    self.casecmp(arg ) == 0
  end
end


puts "equal1.1" if "A".eq1("a")
puts "equal2.1" if "A".eq2("a")

puts "equal1.2" if "A".eq1("b")
puts "equal2.2" if "A".eq2("b")

> equal1.1
> equal2.1
> equal2.2
Pavel S. (Guest)
on 2006-03-22 15:24
(Received via mailing list)
Peter E. wrote:
> class String
>   def eq(arg)
>     self.casecmp(arg ) == 0
>   end
> end
>
> puts "Test".eq("test")
>
>>true

And how can I define eq as an binary operator on String-s allowing me to
write "Test" eq "test"? (And if this is possible, how can set a priority
for such operator?)

P.
Peter E. (Guest)
on 2006-03-22 15:49
(Received via mailing list)
My understanding is that you can only overload existing operators
like ==, !, === but not define custom ones.

Operator overloading should be handled carefully in any case.

I think it is good thing that custom operators
are not allowed / possible.
This topic is locked and can not be replied to.