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

···

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

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

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

'@@@@'.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 / ?

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 3:11 AM, Pavel Pvl <pavel989@gmail.com> wrote:

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

Todd

···

On Dec 30, 2007 4:10 AM, Todd Benson <caduceass@gmail.com> wrote:

On Dec 30, 2007 3:11 AM, Pavel Pvl <pavel989@gmail.com> 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
...

> '@@@@'.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 / ?

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

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!!!

···

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

Todd Benson 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.

···

--
Jabber: sepp2k@jabber.org
ICQ: 205544826

Todd Benson 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: sepp2k@jabber.org
ICQ: 205544826

Todd

···

On Dec 30, 2007 5:20 AM, Sebastian Hungerecker <sepp2k@googlemail.com> wrote:

Todd Benson 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.

···

--
Jabber: sepp2k@jabber.org
ICQ: 205544826