"str1" == "STR1" case insensitive


#1

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


#2

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.


#3

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


#4

Peter E. wrote:

class String
def eq(arg)
self.casecmp(arg ) == 0
end
end

Or you could say:

class String
alias eq casecmp
end


#5

class String
def eq(arg)
self.casecmp(arg ) == 0
end
end

puts “Test”.eq(“test”)

true


#6

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.


#7

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


#8

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.