< :the previous in number
^ :the list in numerical order
> :the next in number
P :the previous artilce (have the same parent)
N :the next (in thread)
|<:the top of this thread
>|:the next thread
^ :the parent (reply-to)
_:the child (an article replying to this)
>:the elder article having the same parent
<:the youger article having the same parent
---:split window and show thread lists
| :split window (vertically) and show thread lists
~ :close the thread frame
.:the index
..:the index of indices
Hi Jesus,
Thanks for the help. I think I see your point about the "lambda {}call"
simply returning the already evaluated expression, as opposed to
actually evaluating it at the time of the yield. But in my case it
doesn't really matter. Where the expression gets evaluated is less
important than making sure I check for errors immediately afterward. So,
from my perspective (and in this case) I am getting the "correct"
result. Here's what I've tried in irb (removing the prompt):
def use_yield
ret = yield
puts "This is where I check for errors"
return ret
end
def use_lambda(func)
ret = lambda {func}.call
puts "This is where I check for errors"
return ret
end
def return_value(val)
return "This is the returning value: #{val}"
end
use_yield { return_value("who cares?") }
This is where I check for errors
=> "This is the returning value: who cares?"
use_lambda(return_value("who cares?"))
This is where I check for errors
=> "This is the returning value: who cares?"
Again, they both seem to be doing the exact same thing. And in my module
it is working correctly, giving me the results I want.
Plus I would like to add a slight wrinkle, i.e. the ability to pass in
additional arguments. The yield method doesn't seem to allow me to pass
in anything but a block and I don't seem able to set local variables,
etc. With the "lambda {}.call" I can pass a variable argument list and
do additional testing on the items in the list as well as execute the
function (the last item on the argument list). Or is there some way to
pass/initialize additional arguments in a block that will get evaluated
by the yield?
For example:
def use_lambda(*list)
if list.length > 1
list[0..-2].each_with_index {|v,i| puts "This is argument #{i}:
#{v}"}
list.slice!(0..-2)
end
ret = lambda { list[0] }.call
puts "This is where I test for errors"
return ret
end
Doing that I can pass as many additional arguments as I want and
evaluate them etc. I haven't figured out how to do that with the
block/yield method.
Thanks,
Rob
--
Posted via http://www.ruby-forum.com/.