所以,我没有在搜索中看到我正在寻找的东西。 这是我的问题。我现在正在学习Ruby和RoR - 我有一个问题似乎无法找到答案。 所以,这是我的游戏代码:
class BlocksAndIterators
def yield_madness(a, b)
my_funky_pi = ((a*b) - (b+a)) / 3.14
my_yield = yield(my_funky_pi, a)
"my_funky_pi: #{my_funky_pi}\nmy_yield: #{my_yield}"
end
end
bi = BlocksAndIterators.new
puts bi.yield_madness(12, 24){|x, y| puts "x: #{x} and y: #{y}"}
现在,我得到的输出如下:
dkm@dkm-MasterControl:~/Projects/ruby_playground$ ruby blocks_iterators.rb
x: 80.2547770700637 and y: 12
my funky pi: 80.2547770700637
my yield:
所以我的问题是这个 - 实际上是否会产生传统意义上的任何回报?我在这里没有收到任何错误,所以我不认为我在语法上做错了什么 - 但my_yield似乎没有返回它应该的样子。 有没有办法将yield的输出捕获到变量? 这只是你永远不会做的事吗?我只是在这里玩代码,但我认为这应该是可以工作的东西 shrugs 无论如何 - 感谢任何回答的人:)
答案 0 :(得分:1)
您遇到的问题是,您的块会返回puts
的结果,即nil
,并且字符串最终会成为空字符串。使用不同的块,例如,你会得到不同的结果:
puts bi.yield_madness(12, 24) { |x, y|
puts "x: #{x} and y: #{y}"
32
}
x: 80.2547770700637 and y: 12
my_funky_pi: 80.2547770700637
my_yield: 32
=> nil