[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

sub is odd with #

Pavel Pvl

12/30/2007 9:11:00 AM

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

7 Answers

Stefano Crocco

12/30/2007 9:31:00 AM

0

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

Todd Benson

12/30/2007 10:10:00 AM

0

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

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

hth,

Todd

Todd Benson

12/30/2007 10:14:00 AM

0

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

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

Todd

Sebastian Hungerecker

12/30/2007 11:21:00 AM

0

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". =A0My bad.

Well actually it would just be instance variable.


=2D-=20
Jabber: sepp2k@jabber.org
ICQ: 205544826

Todd Benson

12/30/2007 3:42:00 PM

0

On Dec 30, 2007 5:20 AM, Sebastian Hungerecker <sepp2k@googlemail.com> wrote:
> 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

Sebastian Hungerecker

12/30/2007 3:59:00 PM

0

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

Pavel Pvl

12/30/2007 5:18:00 PM

0

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