Method notation question

A

Avdi Grimm

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
 
C

Curtis Summers

Avdi said:
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)?
 
D

Dave Thomas

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

ara.t.howard

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.

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
 
G

gwtmp01

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
 
D

Dave Thomas

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

Daniel Berger

Ick.

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.

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

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

Regards,

Dan
 
D

Daniel Schierbeck

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.

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
 
A

ara.t.howard

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.

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
 
A

ara.t.howard

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
 
G

gwtmp01

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'

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
 
A

ara.t.howard

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

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
 
D

Daniel Berger

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!

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
 
A

ara.t.howard

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
 
L

Logan Capaldo

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'
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Members online

No members online now.

Forum statistics

Threads
474,222
Messages
2,571,142
Members
47,757
Latest member
PDIJaclyn

Latest Threads

Top