Forum: Ruby Method notation question

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
4dea430d31b993abaf41cd9b54f8128d?d=identicon&s=25 Avdi Grimm (Guest)
on 2007-01-22 17:00
(Received via mailing list)
I've been using Ruby for years, and it just occurred to me to ask:
where did the convention of referring to methods using a
hash/pound/octothorpe symbol (#), as in "#foo" or "MyClass#bar", come
from?  Is it a Smalltalk thing, or what?

Avdi
D68c82f7c95fbfb6d50d62cbfa0d8409?d=identicon&s=25 Curtis Summers (curtissummers)
on 2007-01-22 17:11
(Received via mailing list)
Avdi Grimm wrote:
> where did the convention of referring to methods using a
> hash/pound/octothorpe symbol (#), as in "#foo" or "MyClass#bar", come
> from?

Isn't this a PickAxe convention to differentiate the class methods
(MyClass.class_method) from the instance methods
(MyClass#instance_method)?
5d06917e13b29bcff1c1609492c06873?d=identicon&s=25 Dave Thomas (Guest)
on 2007-01-22 18:01
(Received via mailing list)
On Jan 22, 2007, at 10:10 AM, Curtis Summers wrote:

> Isn't this a PickAxe convention to differentiate the class methods
> (MyClass.class_method) from the instance methods
> (MyClass#instance_method)?


It predated the PickAxe--it was in a lot of Ruby documentation before
that.

FWIW, I now regret carrying that forward into the book. I think I'd
probably do

    string (in String)

rather than String#strip if I were doing it again.
Cb48ca5059faf7409a5ab3745a964696?d=identicon&s=25 unknown (Guest)
on 2007-01-22 18:04
(Received via mailing list)
On Tue, 23 Jan 2007, Dave Thomas wrote:

> FWIW, I now regret carrying that forward into the book. I think I'd probably
> do
>
>   string (in String)
>
> rather than String#strip if I were doing it again.

i like

   File::class_method

   File.instance_method

the reason is that both work in the shell without funky quoting unlike

   ri 'File#instance_method'  # egads that's a comment!

and is consitent with actual calling conventions.

using parens wouldn't do ri users any favours i think...

2 cts.

-a
E7559e558ececa67c40f452483b9ac8c?d=identicon&s=25 unknown (Guest)
on 2007-01-22 18:23
(Received via mailing list)
On Jan 22, 2007, at 12:04 PM, ara.t.howard@noaa.gov wrote:
> i like
>
>   File::class_method
>
>   File.instance_method
[...]
>
> and is consitent with actual calling conventions.

Huh?  Maybe you mean:  file.instance_method (lower case f).

   file.gets  # ok, assuming file is an instance of File
   File.gets  # no such method

Gary Wright
5d06917e13b29bcff1c1609492c06873?d=identicon&s=25 Dave Thomas (Guest)
on 2007-01-22 18:32
(Received via mailing list)
On Jan 22, 2007, at 11:04 AM, ara.t.howard@noaa.gov wrote:

> i like
>
>   File::class_method
>
>   File.instance_method


The problem with that is that both are valid calling sequences for
class methods. If I'd used the following in the book

   String.split

I'll get lots of email saying "when I type String.split it doesn't work"

I toyed for a while with the Smalltalk-like  a_string.split, but
that's ugly and confusing. It's what I use in the library reference,
because I set up the context for a_string in the description of the
constructor. However, I just don't think it would work in narrative
body text.
5da4c52f43677f395aff5bde775593c2?d=identicon&s=25 Daniel Schierbeck (dasch)
on 2007-01-22 19:51
(Received via mailing list)
On Tue, 2007-01-23 at 02:01 +0900, Dave Thomas wrote:
> FWIW, I now regret carrying that forward into the book. I think I'd
> probably do
>
>     string (in String)
>
> rather than String#strip if I were doing it again.

I must confess I really like the haystack syntax, especially because
it's not valid calling syntax in Ruby, but also because it's very
concise.


Cheers,
Daniel
Aee77dba395ece0a04c688b05b07cd63?d=identicon&s=25 Daniel Berger (Guest)
on 2007-01-22 19:51
(Received via mailing list)
ara.t.howard@noaa.gov wrote:
> > It predated the PickAxe--it was in a lot of Ruby documentation before that.
> >
> > FWIW, I now regret carrying that forward into the book. I think I'd probably
> > do
> >
> >   string (in String)
> >
> > rather than String#strip if I were doing it again.

Ick.

> and is consitent with actual calling conventions.
>
> using parens wouldn't do ri users any favours i think...
>
> 2 cts.

The obvious solution is to modify irb so that it understands that
notation. :)

Knowing Mauricio, he's probably already done it. ;)

Regards,

Dan
Cb48ca5059faf7409a5ab3745a964696?d=identicon&s=25 unknown (Guest)
on 2007-01-22 20:55
(Received via mailing list)
On Tue, 23 Jan 2007, Dave Thomas wrote:

> The problem with that is that both are valid calling sequences for class
>
hmm.  how about this for convention

   String.new.split  # instance method
   String.split      # class method

it's true that 'AClass.new.a_method' may or may not be excutable code -
but
neither is AClass#a_method.

in any case i think a convention that plays well in the shell with ri
would be
a nice addition to the uber convention setter that is the pickaxe ;-)

cheers.

-a
Cb48ca5059faf7409a5ab3745a964696?d=identicon&s=25 unknown (Guest)
on 2007-01-22 20:57
(Received via mailing list)
On Tue, 23 Jan 2007, Daniel Berger wrote:

>
> The obvious solution is to modify irb so that it understands that
> notation. :)
>
> Knowing Mauricio, he's probably already done it. ;)

modifying ri can't address the issue.  the issue is that if one types
this at
the shell prompt

   ~ > ri String#split

                #^^^^^
                #^^^^^
                 this is a comment in the __shell__

so ri never see anything after the '#'.  that's why we have to type

   ri 'String#split'

which is truly icky!

;-)

-a
E7559e558ececa67c40f452483b9ac8c?d=identicon&s=25 unknown (Guest)
on 2007-01-22 21:17
(Received via mailing list)
On Jan 22, 2007, at 2:56 PM, ara.t.howard@noaa.gov wrote:
> so ri never see anything after the '#'.  that's why we have to type
>
>   ri 'String#split'

What shell are you using?  Bash and ksh seem to accept 'ri String#split'
just fine. I don't think they consider # the start of a comment unless
it is preceded by white space.

Gary Wright
Cb48ca5059faf7409a5ab3745a964696?d=identicon&s=25 unknown (Guest)
on 2007-01-22 21:27
(Received via mailing list)
On Tue, 23 Jan 2007 gwtmp01@mac.com wrote:

>>                 this is a comment in the __shell__
>
egads!  you are so right.  i could have swore i had issue with that.

i stand corrected and retract my suggestion of change!

thanks.

-a
Aee77dba395ece0a04c688b05b07cd63?d=identicon&s=25 Daniel Berger (Guest)
on 2007-01-22 21:30
(Received via mailing list)
ara.t.howard@noaa.gov wrote:
>
> which is truly icky!
First, something is wrong with your ri or your shell, because it works
fine for me.
Second, stop using ri and start using fri (fast-ri). :)

Regards,

Dan
Cb48ca5059faf7409a5ab3745a964696?d=identicon&s=25 unknown (Guest)
on 2007-01-22 22:05
(Received via mailing list)
On Tue, 23 Jan 2007, Daniel Berger wrote:

>
> First, something is wrong with your ri or your shell, because it works fine
> for me.  Second, stop using ri and start using fri (fast-ri). :)
>

sorry dan - i was being an idiot.

-a
E34b5cae57e0dd170114dba444e37852?d=identicon&s=25 Logan Capaldo (Guest)
on 2007-01-23 07:55
(Received via mailing list)
On Tue, Jan 23, 2007 at 04:56:30AM +0900, ara.t.howard@noaa.gov wrote:
> the shell prompt
>
Get a better shell? <g>
ri String#split works just fine for me in zsh
This topic is locked and can not be replied to.