sub is odd with #

P

Pavel Pvl

seems to me as though I'm redundant on this forum...


well anyway, doing '@@@@'.sub('@','#')

returns
'/#@@@'

how can I make it so that it doesn't through in the / ?

using 1.9 btw

gsub doesn't do that, but I specifically ned sub to do that.

ty
 
S

Stefano Crocco

Alle domenica 30 dicembre 2007, Pavel Pvl ha scritto:
seems to me as though I'm redundant on this forum...


well anyway, doing '@@@@'.sub('@','#')

returns
'/#@@@'

how can I make it so that it doesn't through in the / ?

using 1.9 btw

gsub doesn't do that, but I specifically ned sub to do that.

ty

First of all, I think what you see is not a '/' but a '\'.

I don't think the \ is part of the returned string. I assume you're trying
this in irb. irb displays the return value of every expression using its
inspect method. String#inspect escapes some characters, such as double quotes
and the # character, when it would be interpreted as the beginning of string
interpolation. Since "#@" is the beginning of a string interpolation, it gets
escaped. If you do a puts '@@@@'.sub('@','#'), or examine the first element
of the returned string, you'll see that the returned string is correct.

Using gsub instead of sub doesn't display the \ because it replaces all the @
with #, and since the sequence '##' isn't a special sequence, it's not
escaped by String#inspect.

I hope this helps

Stefano
 
T

Todd Benson

seems to me as though I'm redundant on this forum...


well anyway, doing '@@@@'.sub('@','#')

returns
'/#@@@'

It should return "\#@@@" (backslash before a character inside a double
quoted string is an escaped character). You are looking at the
general string representation of '#@@@'. Do this to see what I mean
...

irb> '@@@@'.sub('@', '#').each_byte { |b| puts b }

When you use 1.8 you see 4 integers, the first one the byte code for
the # sign, the others for the @ sign. I think 1.9 is the same way
with #each_byte, but haven't tried it out.
how can I make it so that it doesn't through in the / ?

irb> puts '@@@@'.sub('@', '#')
using 1.9 btw

gsub doesn't do that, but I specifically ned sub to do that.

'####' is not special and doesn't need to be escaped.

The character sequence '#@' is because it is a short hand way of
"exploding" a class variable inside a String.

hth,

Todd
 
T

Todd Benson

It should return "\#@@@" (backslash before a character inside a double
quoted string is an escaped character). You are looking at the
general string representation of '#@@@'. Do this to see what I mean
...

irb> '@@@@'.sub('@', '#').each_byte { |b| puts b }

When you use 1.8 you see 4 integers, the first one the byte code for
the # sign, the others for the @ sign. I think 1.9 is the same way
with #each_byte, but haven't tried it out.


irb> puts '@@@@'.sub('@', '#')


'####' is not special and doesn't need to be escaped.

The character sequence '#@' is because it is a short hand way of
"exploding" a class variable inside a String.

That would be "class instance variable". My bad.

Todd
 
S

Sebastian Hungerecker

Todd said:
That would be "class instance variable". =A0My bad.

Well actually it would just be instance variable.


=2D-=20
Jabber: (e-mail address removed)
ICQ: 205544826
 
T

Todd Benson

Well actually it would just be instance variable.

Newbies should know that that would be the correct phrase, I admit. I
don't see, however the difference in terminology per se. I said a
"class instance variable", which would be a variable in the context of
an instance of a class (class not capitalized).
Jabber: (e-mail address removed)
ICQ: 205544826

Todd
 
S

Sebastian Hungerecker

Todd said:
I
don't see, however the difference in terminology per se. =A0I said a
"class instance variable", which would be a variable in the context of
an instance of a class (class not capitalized).

I think it gets really complicated once you start to use "class instance=20
variable" and "Class instance variable", both meaning different things.=20
Especially at the beginning of a sentence where both would look the same.
Given that "class instance variable" the way you use it is the same as just=
=20
instance variable, I really think it's a lot less confusing to just say the=
=20
latter.


=2D-=20
Jabber: (e-mail address removed)
ICQ: 205544826
 
P

Pavel Pvl

First of all, I think what you see is not a '/' but a '\'.
I don't think the \ is part of the returned string. I assume you're
trying
this in irb. irb displays the return value of every expression using its
inspect method. String#inspect escapes some characters, such as double
quotes
and the # character, when it would be interpreted as the beginning of
string
interpolation. Since "#@" is the beginning of a string interpolation, it
gets
escaped. If you do a puts '@@@@'.sub('@','#'), or examine the first
element
of the returned string, you'll see that the returned string is correct.
d by String#inspect.

thanks for all the replies! but this was true, i tried it with puts and
it came out normal. TY!!!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top