segmented method names

J

Jan Hegewald

[Note: parts of this message were removed to make it a legal post.]

Dear all,
in Objective-C it is possible to split a method name into several
segments to be able to put a meaningful description before each
argument, like
(BOOL)containsPointX:(int)x Y:(int)y

is there a ruby way to achieve something similar?

Many TIA,
-- Jan
 
S

Sandro Paganotti

A solution can be:

#function
def contains_point(opts = { :x=>nil, :y=>nil })

end

# call
contains_point :x=>value, :y=>value
 
R

Rick DeNatale

#function
def contains_point(opts = { :x=>nil, :y=>nil })

end

# call
contains_point :x=>value, :y=>value

And in Ruby 1.9 you can also use the new hash literal syntax in the
call so it becomes:

contains_point x: value y: value

Apple's RubyCocoa, which is implementing Ruby on the Objective-C
runtime actually turns this into an objective-c call.

However, the semantics of Ruby keyword/hash option parameters are
slightly different from the Smalltalk inspired Objective-C method
selectors. In Smalltalk/ObjectiveC x:y: is a different message and
will find a different method than y:x:, whereas Ruby keyword/hash
parameters are order independent and aren't involved in resolving a
message to a method.
 
N

Nobuyoshi Nakada

Hi,

At Thu, 8 May 2008 21:49:06 +0900,
Rick DeNatale wrote in [ruby-talk:301103]:
And in Ruby 1.9 you can also use the new hash literal syntax in the
call so it becomes:

contains_point x: value y: value

You forgot a comma between first value and y:.
However, the semantics of Ruby keyword/hash option parameters are
slightly different from the Smalltalk inspired Objective-C method
selectors. In Smalltalk/ObjectiveC x:y: is a different message and
will find a different method than y:x:, whereas Ruby keyword/hash
parameters are order independent and aren't involved in resolving a
message to a method.

And the same selector can duplicate, x:x:x: is valid and
differs from x:, but it's impossible with a hash.
 
J

Jan Hegewald

Hi,

thank you for all the suggestions. The Hash solution seem to be a =20
feasible workaround. I=B4ll try that. To bad there is no "real" way to =20=

split the name in ruby...


Cheers,
-- Jan
 
R

Rick DeNatale

Hi,

At Thu, 8 May 2008 21:49:06 +0900,
Rick DeNatale wrote in [ruby-talk:301103]:
And in Ruby 1.9 you can also use the new hash literal syntax in the
call so it becomes:

contains_point x: value y: value

You forgot a comma between first value and y:.

You are correct of course, thanks.
And the same selector can duplicate, x:x:x: is valid and
differs from x:, but it's impossible with a hash.

Good point.
 

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

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,537
Members
45,021
Latest member
AkilahJaim

Latest Threads

Top