Forum: Ruby string comparison

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.
867ad723d2111b95eec9b3169cec2a72?d=identicon&s=25 Boris Glawe (Guest)
on 2005-12-15 00:39
(Received via mailing list)
Hi,

I have a class containing a string as an instance variable and I have a
local
variable containing a string.

I compare these two strings with '==' and with the .eql? method:

###################################

obj.text = "hello world"
localtext = "hello world"

if obj.text == localtext
then
	# do something
end

###################################

The condition never became true in my program. Thus I added some debug
output.
This is the the debugging code:

if not obj.text == localtext
then
	print "\"#{obj.text}\" is not equal \"localtext\"\n"
end

This is, what it gave me:

"hello world" is not equal "hello world"

It's not worth trying the example above, since it's not the actual code.
The
actual code in my project is much more complex, that's why I used this
example
to discribe my problem.

Fact is that when the string comparison does not succeed I get an output
like

"hello world" is not equal "hello "world"

Now it's your turn... What could cause this behaviour?

thanks and greets

Boris
A70b7da5a3a712e800100e61ef8d8917?d=identicon&s=25 ako... (Guest)
on 2005-12-15 00:48
(Received via mailing list)
hello,

the below code displays 'equal' on my machine:

s0 = "hello world"
s1 = "hello world"
puts 'equal' if s0 == s1

konstantin
Af95bdaf87958c40150b813e94381bfd?d=identicon&s=25 Christer Nilsson (christer)
on 2005-12-15 00:55
You have real diff here:
> "hello world" is not equal "hello "world"

I tried this code.
Behaves as expected, prints equal.

class Obj
  attr_accessor :text
end

def test
  obj=Obj.new
  obj.text="world"
  localtext="world"
  if obj.text == localtext then
    print "equal\n"
  else
    print "not equal\n"
  end
end

test

Isolate the problem, and wrap it in a test/unit. Then I can take a
closer look.

Christer
867ad723d2111b95eec9b3169cec2a72?d=identicon&s=25 Boris Glawe (Guest)
on 2005-12-15 01:30
(Received via mailing list)
> Isolate the problem, and wrap it in a test/unit. Then I can take a
> closer look.
>

The problem was a whitespace, which I did not see. I actually wrapped
the output
in apostrophs in order to see whitespaces. Since I am programming with
cgi, I
see the output in the browser window, which prints whitespaces very
small.

Anyway thanks for the help!!

greets Boris
A70b7da5a3a712e800100e61ef8d8917?d=identicon&s=25 ako... (Guest)
on 2005-12-15 02:21
(Received via mailing list)
you can run your cgi script from a command line thus: 'ruby script.cgi'
just set REQUEST_URI environment variable to set the url.

konstantin
25e11a00a89683f7e01e425a1a6e305c?d=identicon&s=25 Wilson Bilkovich (Guest)
on 2005-12-15 05:22
(Received via mailing list)
On 12/14/05, Boris Glawe <boris@boris-glawe.de> wrote:
> if not obj.text == localtext
> then
>         print "\"#{obj.text}\" is not equal \"localtext\"\n"
> end
>
> This is, what it gave me:
>
> "hello world" is not equal "hello world"
>

Just to remove any precedence weirdness, does this behave differently
from your failing code?
puts %Q[#{obj.text} differs from #{localtext}] unless obj.text ==
localtext
F7b23ca97e51ae89341a19548aa63467?d=identicon&s=25 Tom Reilly (Guest)
on 2005-12-15 21:17
(Received via mailing list)
You might check to see that obj.text.class is the same as
obj.text.class.
Also check the sizes of both.  I've been caught by \n which doesn't show
up.
This topic is locked and can not be replied to.