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?
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
In the end I did it this way.
def loop_td(func,matrix,grocery,name)
holder = ["
" + name + “ | ”]
for x in matrix
holder << ("
" + send(func,grocery,x) + “ | ”)
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
for with
the
same array.
-yl(thanks for answering btw)
|