[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

correct terminology for a function that yields

Joe Van Dyk

12/23/2005 12:01:00 AM

def foo
yield
end

foo do
puts "hey"
end


What's the correct description of what is going on there? I've got a
function foo. No arguments, right? Does it "take a block"? I know
it gives control to the block, but I'm not sure of the correct
terminology to use.

Joe


3 Answers

Edward Faulkner

12/23/2005 12:04:00 AM

0

On Fri, Dec 23, 2005 at 09:00:31AM +0900, Joe Van Dyk wrote:
> def foo
> yield
> end
>
> foo do
> puts "hey"
> end
>
>
> What's the correct description of what is going on there? I've got a
> function foo. No arguments, right? Does it "take a block"? I know
> it gives control to the block, but I'm not sure of the correct
> terminology to use.

It does indeed "take a block". The block argument is implicit. You
could make it explicit if you wanted to:

def foo(&blk)
blk.call
end

In more general terms, any function that takes another function as an
argument (or returns one as a result) is known as a higher-order
function.

regards,
Ed

Joe Van Dyk

12/23/2005 12:17:00 AM

0

On 12/22/05, Edward Faulkner <ef@alum.mit.edu> wrote:
> On Fri, Dec 23, 2005 at 09:00:31AM +0900, Joe Van Dyk wrote:
> > def foo
> > yield
> > end
> >
> > foo do
> > puts "hey"
> > end
> >
> >
> > What's the correct description of what is going on there? I've got a
> > function foo. No arguments, right? Does it "take a block"? I know
> > it gives control to the block, but I'm not sure of the correct
> > terminology to use.
>
> It does indeed "take a block". The block argument is implicit. You
> could make it explicit if you wanted to:
>
> def foo(&blk)
> blk.call
> end
>
> In more general terms, any function that takes another function as an
> argument (or returns one as a result) is known as a higher-order
> function.

Ok, thanks. I'm writing documentation for a domain-specific language
(in Ruby) that I created. People who use it are probably programmers,
but may not be experienced with Ruby, so I wanted to explain a little
bit about what's going on behind the scenes.


Robert Klemme

12/23/2005 8:36:00 AM

0

Joe Van Dyk wrote:
> On 12/22/05, Edward Faulkner <ef@alum.mit.edu> wrote:
>> On Fri, Dec 23, 2005 at 09:00:31AM +0900, Joe Van Dyk wrote:
>>> def foo
>>> yield
>>> end
>>>
>>> foo do
>>> puts "hey"
>>> end
>>>
>>>
>>> What's the correct description of what is going on there? I've got
>>> a function foo. No arguments, right? Does it "take a block"? I
>>> know it gives control to the block, but I'm not sure of the correct
>>> terminology to use.
>>
>> It does indeed "take a block". The block argument is implicit. You
>> could make it explicit if you wanted to:
>>
>> def foo(&blk)
>> blk.call
>> end

Note, that this has some performance implications though.

>> In more general terms, any function that takes another function as an
>> argument (or returns one as a result) is known as a higher-order
>> function.
>
> Ok, thanks. I'm writing documentation for a domain-specific language
> (in Ruby) that I created. People who use it are probably programmers,
> but may not be experienced with Ruby, so I wanted to explain a little
> bit about what's going on behind the scenes.

You can as well call the block "anonymous function" or "anonymous
callback" IMHO. What I like about the "callback" variant is that it
precisely describes what's happening here: the caller provides a function
as hook that is called by the method.

Kind regards

robert