我是ruby和RoR世界的新手,最近我学到了块。我已经读取了代码块内部的return实际上是从调用它的最上面的函数返回的
例如
def test
value = yield
puts value
end
# prints "return inside block"
test do
"return inside block"
end
# prints nothing
test do
return "return inside block"
end
那么,如果这就是块和“返回”在ruby中的工作方式,为什么around_action的行为不一样呢?
例如
class TestController < ApplicationController
around_action :aroundy
def test
render json: {amit:"hello"}
puts "hello"
return
end
# prints after even though the action "test" calls return
def aroundy
puts "before"
yield
puts "after"
end
end
如果我在操作内部调用return,那么代码在that之后如何继续运行呢?
发布于 2020-10-24 05:21:32
这两种情况之间有一个很大的区别:您的操作test
是一个方法,而不是一个块。仅此一点就足以抛出所有期望,即return
应该以与在块中相同的方式工作。
此外,它的调用方式并不像您的第一个代码片段中那样简单。Here的around_action
如何在rails中实现,例如:
define_method "#{callback}_action" do |*names, &blk|
_insert_callbacks(names, blk) do |name, options|
set_callback(:process_action, callback, name, options)
end
end
https://stackoverflow.com/questions/64507189
复制相似问题