Sub is odd with #

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

Alle domenica 30 dicembre 2007, Pavel P. ha scritto:

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

On Dec 30, 2007 3:11 AM, Pavel P. [email protected] wrote:

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.

ty

Posted via http://www.ruby-forum.com/.

hth,

Todd

On Dec 30, 2007 4:10 AM, Todd B. [email protected] wrote:

quoted string is an escaped character). You are looking at the

how can I make it so that it doesn’t through in the / ?
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

Todd B. wrote:

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.

Well actually it would just be instance variable.

On Dec 30, 2007 5:20 AM, Sebastian H. [email protected]
wrote:

Todd B. wrote:

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.

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: [email protected]
ICQ: 205544826

Todd

Todd B. wrote:

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).

I think it gets really complicated once you start to use “class instance
variable” and “Class instance variable”, both meaning different things.
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
instance variable, I really think it’s a lot less confusing to just say
the
latter.

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.

Stefano

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