Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > sub is odd with #

Reply
Thread Tools

sub is odd with #

 
 
Pavel Pvl
Guest
Posts: n/a
 
      12-30-2007
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/.

 
Reply With Quote
 
 
 
 
Stefano Crocco
Guest
Posts: n/a
 
      12-30-2007
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

 
Reply With Quote
 
 
 
 
Todd Benson
Guest
Posts: n/a
 
      12-30-2007
On Dec 30, 2007 3:11 AM, Pavel Pvl <(E-Mail Removed)> 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

 
Reply With Quote
 
Todd Benson
Guest
Posts: n/a
 
      12-30-2007
On Dec 30, 2007 4:10 AM, Todd Benson <(E-Mail Removed)> wrote:
> On Dec 30, 2007 3:11 AM, Pavel Pvl <(E-Mail Removed)> 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

 
Reply With Quote
 
Sebastian Hungerecker
Guest
Posts: n/a
 
      12-30-2007
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: http://www.velocityreviews.com/forums/(E-Mail Removed)
ICQ: 205544826

 
Reply With Quote
 
Todd Benson
Guest
Posts: n/a
 
      12-30-2007
On Dec 30, 2007 5:20 AM, Sebastian Hungerecker <(E-Mail Removed)> 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: (E-Mail Removed)
> ICQ: 205544826


Todd

 
Reply With Quote
 
Sebastian Hungerecker
Guest
Posts: n/a
 
      12-30-2007
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: (E-Mail Removed)
ICQ: 205544826

 
Reply With Quote
 
Pavel Pvl
Guest
Posts: n/a
 
      12-30-2007
> 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/.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Death To Sub-Sub-Sub-Directories! Lawrence D'Oliveiro Java 92 05-20-2011 06:50 AM
Recognising Sub-Items and sub-sub items using xslt Ben XML 2 09-19-2007 09:35 AM
Odd behavior with odd code Michael Speer C Programming 33 02-18-2007 07:31 AM
Possible to terminate a sub that loads another sub? Kathy Burke ASP .Net 3 11-24-2003 02:01 PM
how do make a pop-up in sub ASP.net sub ? THY ASP .Net 1 08-18-2003 11:30 PM



Advertisments