【发布时间】:2020-08-03 10:13:16
【问题描述】:
考虑以下类:
class Foo
def an_inst_method
'instance method'
end
def self.a_class_method
'class method'
end
alias_method :a_new_inst_method, :an_inst_method
end
这没问题,您可以拨打Foo.new.a_new_inst_method 没有问题。
我希望能够拥有像 Foo.add_widget(*items) 这样的类方法并为其命名,以便我可以执行以下操作:
Foo.add_widget 'item1'
Foo.add_widgets 'item2', 'item3'
所以本质上它具有像1.minute 和2.minutes 这样的“红宝石风格”所以我想给Foo.add_widget 起别名,所以调用Foo.add_widgets 调用完全相同的方法。我知道我可以把它包起来,但我觉得我应该能够以一种更干净的方式来做到这一点。
考虑一下我尝试这样的尝试:
class Foo
def an_inst_method
'instance method'
end
def self.a_class_method
'class method'
end
alias_method :a_new_inst_method, :an_inst_method
alias_method :a_new_class_method, :a_class_method
end
但是,我收到以下错误:
NameError (undefined method `a_class_method' for class `Foo')
所以看起来这不适用于类方法。我该怎么做?
【问题讨论】:
-
问题很相似,但它是在 Rails 上下文中。解决方案会回答我的问题,但我几乎可以肯定他可能会利用 Arel 来解决他的问题。我发布的问题纯粹是作为一个 Ruby 问题设计的,因此更容易搜索。您可能想建议编辑他的问题的标题,因为当我搜索我的问题的解决方案时它没有出现。
-
是的,不幸的是,另一个问题具有误导性且完全不相关的 Rails 上下文,对于某些人来说可能更难找到。恕我直言,它仍然是一个完美的 content 副本,虽然不是 topic 副本。答案也是一样的。无论如何,仍然是你的一个好问题。 旁注:当我在审核期间将您标记为受骗者时,审核系统打了我耳光并严重指责我没有注意,这本身就是一个荒谬的主张,因为找到(潜在的)受骗者需要相当多的注意力。简直不敢相信这以前没有出现过。
-
之前没有针对我的特定问题或您所做的其他评论提出过问题?你收到什么讯息?我很好奇。
-
当我在审核期间阅读您的问题时,我指的是我,当我立即想到“我确定这已经得到了回答”。
标签: ruby alias-method