如何获取调用别名方法的名称?
我有一个名为link_to_admin
方法,然后我将另一个名为simple_link_to
方法别名
def link_to_admin(name,url,options={}) # My stuff here link_to(name,url,options) end alias_method :simple_link_to, :link_to_admin
在这里我link_to_admin
一个问题,如果我调用link_to_admin
,我想将值打印到
防爆。
def link_to_admin(name,url,options={}) # My stuff here menu = "" menu << " #{link_to(name,url,options)} " menu.html_safe end
如果我打电话给simple_link_to
不需要
li_required
这样的options
然后在我的方法中检查条件。 这是完美的,我知道这是正确的方法。
def link_to_admin(name,url,options={}) menu = "" menu << options[:li_required] ? " #{link_to(name,url,options)} " : link_to(name,url,options) menu.html_safe end
但是,在我尝试找到像simple_method
或link_to_admin
类的调用方法simple_method
,我试过:
1.__method__ 2.caller[0]=~/`(.*?)'/
这没有按预期工作。
我在layout
调用simple_method
或link_to_admin
方法,因此__method__
始终只返回link_to_admin
。
但是caller[0]=~/
/(。*?)’/ means, it's returning layout path and if I am calling from any other
if am calling from
布局if am calling from
means, it's returning layout path and if I am calling from any other
帮助器or
类means, it's returning layout path and if I am calling from any other
则意味着它返回当前方法。
任何其他方式是检查方法名称。
我知道这不是一个好问题,任何人都可以告诉我任何其他方式。
注意: – 我只为命名转换创建了alias_method。 除了添加
不仅在这里,我还有很长一段时间的怀疑。 我知道我可以再定义一种方法,我可以做到。
离开我的场景,一般我想知道这个答案。
使用__callee__
而不是__method__
将获取正在运行的别名的名称。
我建议,不要依赖于方法名称和分支(对于任何方法名称重构都会变得很脆弱,显然更复杂,等等),您只需将方法分解为将共同逻辑抽象为共享方法。
这是我写它的方式:
def simple_link_to(name, url, options = {}) # shared_link_to(name) ... or whatever link_to(name, url, options) end def link_to_admin(name, url, options = {}) # shared_link_to(name) ... or whatever content_tag(:li) do simple_link_to(name, url, options) end end private def shared_link_to(name) # do whatever is common end
注意:我已经猜到你有一些常见的代码,你想要抽象出一些方法(我称之为shared_link_to
)……但是你需要用那个部分做你需要的东西。