如何获取调用别名方法的名称?

     2023-03-04     142

关键词:

【中文标题】如何获取调用别名方法的名称?【英文标题】: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,就不需要&lt;li&gt; 标签。所以目前我正在传递一个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_methodlink_to_admin这样的调用方法之前,我尝试了:

1.__method__
2.caller[0]=~/`(.*?)'/

这没有按预期工作。

我在layout 中调用simple_methodlink_to_admin 方法,所以__method__ 总是只返回link_to_admin

但是caller[0]=~/(.*?)'/if am calling fromlayoutmeans, it's returning layout path and if I am calling from any otherhelperorclass` 表示它正在返回当前方法。

还有其他方法可以检查方法名。

我知道这不是一个好问题,谁能告诉我其他方式。

注意:- 我创建了 alias_method 仅用于命名转换。除了添加&lt;li&gt; 标签,我什么都没做。

不仅在这里,很久以前就有这个疑问。我知道我可以再定义一种方法并且我可以做到。

离开我的场景,一般我想知道这个答案。

【问题讨论】:

你为什么使用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 查看详情