Forum: Ruby on Rails Passing a function with arguments to another function with arguments that is a loop

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.
Tyl T. (Guest)
on 2008-10-28 17:18
(Received via mailing list)
Hi, I am a noobie. I just want to know what is the standard or most
effective way of doing this

I have two functions


  def display_price(grocery,batch)
    grocery_price = grocery.send(batch).price
    if grocery_price
      number_to_currency(grocery_price)
    else
      "NA"
    end
  end

def loop(func,matrix)

matrix.each { |matrix| display_price(@grocery,matrix) }

end


the "func argument" in the loop function is suppose to be
display_price but how do i put it in if the "batch" is the thing that
I want to be looped through?
Roy P. (Guest)
on 2008-10-29 13:44
(Received via mailing list)
You can create a pointer to your display_price method with a Proc
object, e.g.:

  this_func = Proc.new {|groc, bat| display_price(groc, bat)}

  loop(this_func, batch)

Your loop method invokes the actual function with the .call method,
e.g.:

  def loop(func, matrix)
    # Note that .each will almost certainly not yield the matrix object
itself.
    matrix.each { |matrix_item| func.call(@grocery, matrix) }
  end

No clue if that will work for your actual application--trying to figure
out what you might be doing is making my head hurt. ;-)  This feels like
it's well outside of noob-land.  If you back up & tell us more about
your underlying goals, we may be able to give advice for staying w/more
straightforward processing.

HTH,

-Roy
Tyl T. (Guest)
on 2008-10-31 12:24
(Received via mailing list)
In the end I did it this way.

  def loop_td(func,matrix,grocery,name)
    holder = ["<td>" + name + "</td>"]
    for x in matrix
    holder << ("<td>" + send(func,grocery,x) + "</td>")
    end

    return holder

  end

display_price is the func I want to insert

  def display_price(grocery,batch)
    grocery_price = grocery.send(batch).price
    if grocery_price
      number_to_currency(grocery_price)
    else
      "NA"
    end
  end

The underlying goal was to make a function where I could automatically
generate a table row that used the same function in each <td> for with
the
same array.

-yl(thanks for answering btw)
This topic is locked and can not be replied to.