msmith1114
msmith1114

Reputation: 3229

Ruby: Passing a Proc to method with no parameters

So this works(Pulled from Code-Academy):

def greeter
  yield
end

phrase = Proc.new {
  puts "Hello there!"
  }

greeter(&phrase)

I understand what yield is doing, and understand what a Proc does. However "why" is this allowed?

IE: greeter method has no parameters defined, not even optional ones. So why does ruby allow us to pass something to it? (In this case a reference to a block of code (The Proc phrase).

I mean it's great that it does, but rule-wise this seems like it shouldn't be allowed?

Upvotes: 1

Views: 1053

Answers (1)

progfan
progfan

Reputation: 2526

&phrase is not a reference. It is the Ruby annotation for passing a block explicitly. Here , it is converting the proc to the implicit block for the method call. Since every method accepts a default block as an argument, your code works.

Upvotes: 2

Related Questions