关键词:
【中文标题】如何获取调用别名方法的名称?【英文标题】:How to get the name of the calling alias method? 【发布时间】:2014-07-11 11:25:51 【问题描述】:我有一个名为 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
,我会遇到一个问题,我想将值打印到<li>
标签中
例如
def link_to_admin(name,url,options=)
# My stuff here
menu = ""
menu << "<li> #link_to(name,url,options)</li>"
menu.html_safe
end
如果我打电话给simple_link_to
,就不需要<li>
标签。所以目前我正在传递一个options
,比如li_required
,然后在我的方法中检查条件。这是完美的工作,我知道这是正确的方法。
def link_to_admin(name,url,options=)
menu = ""
menu << options[:li_required] ? "<li> #link_to(name,url,options)</li>" : link_to(name,url,options)
menu.html_safe
end
但是,在我试图找到像simple_method
或link_to_admin
这样的调用方法之前,我尝试了:
1.__method__
2.caller[0]=~/`(.*?)'/
这没有按预期工作。
我在layout
中调用simple_method
或link_to_admin
方法,所以__method__
总是只返回link_to_admin
。
但是caller[0]=~/
(.*?)'/if am calling from
layoutmeans, it's returning layout path and if I am calling from any other
helperor
class` 表示它正在返回当前方法。
还有其他方法可以检查方法名。
我知道这不是一个好问题,谁能告诉我其他方式。
注意:- 我创建了 alias_method 仅用于命名转换。除了添加<li>
标签,我什么都没做。
不仅在这里,很久以前就有这个疑问。我知道我可以再定义一种方法并且我可以做到。
离开我的场景,一般我想知道这个答案。
【问题讨论】:
你为什么使用alias_method?委托不起作用? 为什么我们需要delegate
?
我的意思不是 delegate
关键字,而是想法 - 只需从另一种方法中调用一个方法(如 @pdobb 建议的那样)
感谢您的回复,离开我的场景,一般我想知道这个答案。
【参考方案1】:
使用__callee__
代替__method__
将获得正在运行的别名的名称。
【讨论】:
感谢您提供实际问题的答案。【参考方案2】:我建议不要依赖方法名称和分支(任何方法名称重构都会变得脆弱,显然更复杂等),而是简单地分解方法,以将通用逻辑抽象为共享方法。
我会这样写:
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
)...但是用它做您需要的事情部分。
【讨论】:
除了添加li
之外我什么也没做。
不只是这里,很久以前就有这个疑问了。如何获取时区别名的规范时区名称?
】如何获取时区别名的规范时区名称?【英文标题】:Howtogetthecanonicaltimezonenameofatimezonealias?【发布时间】:2021-11-2801:47:25【问题描述】:我想创建一个函数,将时区别名转换为所述时区的规范名称。StatusoftimezonesfromWikipedia例如... 查看详情
如何使用 laravel 别名调用非静态方法
】如何使用laravel别名调用非静态方法【英文标题】:Howtocallnon-staticmethodusinglaravelalias【发布时间】:2020-12-2600:07:45【问题描述】:我有一个自定义帮助程序类,并为该类设置了别名以访问刀片文件(前端)。我可以访问引用alias... 查看详情
如何使用别名调用 trait 方法
】如何使用别名调用trait方法【英文标题】:Howtocallatraitmethodwithalias【发布时间】:2016-03-2514:58:26【问题描述】:我试图在一个名为Page的类中放置一个特征。我还需要重命名一个特征函数,这样它就不会与现有的类函数发生冲突... 查看详情
更改 Symfony 自动装配别名的名称
...使用Symfony5.3和SymfonyRateLimiter包。为此,一个方法应该被调用:publicfunctionroot(Request$request,RateLimiterFactory$authenticationApiLimite 查看详情
如何获取对象的名称
】如何获取对象的名称【英文标题】:HowtogetthenameofanObject【发布时间】:2020-07-2907:37:33【问题描述】:我正在编写一个小RPG(角色扮演游戏)情况如下:我创建了一个对象Personnage。在我的课程中,我创建了一个方法atttaquer。但... 查看详情
如何根据java中的输入数据顺序/名称动态调用不同的setter方法?
我班上有大约20个变量。我需要读取excel表,然后相应地获取数据并根据变量的名称在DTO类中设置它。除2外,所有变量都是字符串。那些2是数字的。现在我将从excel获得单行,接下来我必须获取每个单元格的内容并根据单元格的... 查看详情
如何在 C# 中获取调用方法 [重复]
】如何在C#中获取调用方法[重复]【英文标题】:HowIcangetthecallingmethodsinC#[duplicate]【发布时间】:2010-09-2812:49:03【问题描述】:可能重复:HowcanIfindthemethodthatcalledthecurrentmethod?我需要一种方法来知道C#中调用方法的名称。例如:priv... 查看详情
如何在 Laravel Eager Loading Array 中使用别名而不更改方法名称
】如何在LaravelEagerLoadingArray中使用别名而不更改方法名称【英文标题】:HowtoaliasinLaravelEagerLoadingArraywithoutchangingmethodname【发布时间】:2021-11-2202:10:43【问题描述】:我在执行Laravel预加载时需要别名:$employee=Employee::with([\'profilepi... 查看详情
从 Hashmap put() 中获取调用方法名称的列表
】从Hashmapput()中获取调用方法名称的列表【英文标题】:Getthelistofinvokingmethodname\'sfromHashmapput()【发布时间】:2020-07-3121:08:52【问题描述】:您能帮我从HashMapput方法中获取列表方法名称吗?Bookbook=newBook();book.setTitle("TheLittlePrince");... 查看详情
使用 XMPP 更改好友显示名称(别名)
...的显示名称或别名。请帮助。【问题讨论】:您希望我们如何帮助您?让我知道是否有任何方法可以仅使用XMPP更改朋友的别名。我没有任何用于此目的的网络服务。【参考方案1】:Section2.4.1ofRFC6121有一个如何 查看详情
CakePHP 获取动作名称
...面,我正在寻找的是被调用方法的实际名称,无论URL语法如何。有没有办法找到 查看详情
未知实体命名空间别名“实体名称”
...法。在我的项目symfony中,我使用此代码从我的数据库中获取信息$backup=$this->getDoctrine()->getRepository(LocalInformations::c 查看详情
获取调用方法的方法? [复制]
】获取调用方法的方法?[复制]【英文标题】:GettingTheMethodThatAMethodWasCalledFrom?[duplicate]【发布时间】:2011-08-0518:14:36【问题描述】:是否可以在PostError中确定调用方法名称“EatPizza”?我想我可以将“EatPizza”作为参数之一传递... 查看详情
不同程序集,名称空间类名和方法签名都一样的方法,如何调用
...序集,名称空间类名和方法签名都一样的方法,如何调用。本文将介绍如何通过别名的方式来解决这个问题。创建两个不同的程序集我们来创建两个不同的程序集,但是他们的名称空间一样:dotnetnewclasslib-oClassLibr... 查看详情
如何获取调用COM服务器方法的用户名?
】如何获取调用COM服务器方法的用户名?【英文标题】:HowcanIgettheusernamewhoinvokedthemethodofCOMserver?【发布时间】:2012-02-2817:02:03【问题描述】:我有一个用C++编写的COM服务器,在网络中的某台计算机上运行。客户端可以从其他计... 查看详情
如何仅从接口和方法名称调用方法?
】如何仅从接口和方法名称调用方法?【英文标题】:Howtoinvokemethodonlyfrominterfaceandmethodname?【发布时间】:2015-08-0607:48:16【问题描述】:在我的程序中,我们引用了另一个程序集,并且该程序集中肯定有一个实现实例。所以我们... 查看详情
如何通过实例方法名字的字符串调用方法?(代码片段)
需求:某项目中,我们的代码使用了三个不同库中的图形类,Circle,Triangle,Rectangle他们都有一个获取图形面积的接口(方法)但是接口名字不同,我们实现一个统一获取面积的函数,使用每种方法名进行尝试,调用相应类的接口... 查看详情
java-调用get方法时获取类属性名称(代码片段)
...属性名称。我在网上看到一些东西可以使用Reflection概念获取类属性名称。我的情况:尝试编写一个方法来检查null/empty的属性值,并在属性值为null/empty时返回属性名称。例:类:publicclassMyClassprivateappName;publicvoidsetAppName(Stringapp 查看详情