您是否使用别名方法来添加更多方法来调用方法(如长度和大小)还是有其他用途?何时使用方法别名?
3
A
回答
3
alias_method调用对重新实现某些内容,但保留原始版本也很有用。还有Rails的alias_method_chain,它使这种事情变得更加简单。
当你有一些行为最初是相同的,但在未来可能会发生分歧的时候,alias_method也会派上用场,至少你可以在这些行为中粗暴地开始。
def handle_default_situation
nil
end
%w[ poll push foo ].each do |type|
alias_method :"handle_#{type}_situation", :handle_default_situation
end
3
是的。
它通常用于在覆盖它们之前保留现有方法的句柄。 (人为的例子)
鉴于一类是这样的:
class Foo
def do_something
puts "something"
end
end
你可以看到代码,增加了新的行为,像这样:
class Foo
def do_something_with_logging
puts "started doing something"
do_something_without_logging # call original implementation
puts "stopped doing something"
end
alias_method :do_something_without_logging, :do_something
alias_method :do_something, :do_something_with_logging
end
(这正是如何alias_method_chain
作品)
但是,对于这种用例,通常更适合于use inheritance and modules to your advantage。
不过,alias_method
是有一个有用的工具,如果你确实需要重新定义现有类的行为(或者,如果你想实现像alias_method_chain)
相关问题
- 1. Java方法别名
- 2. 实例的重命名/别名方法名称(使用Python)
- 3. 如何根据用户的输入使用别名方法
- 4. 如何识别使用属性名称的setter方法?
- 5. 获取方法别名
- 6. 的Ruby别名方法链
- 7. $ 1的别名方法
- 8. 如何添加'addEventListener'方法的别名?
- 9. 别名类名称的方法
- 10. 何时使用didMoveToWindow方法?
- 11. 何时使用session.replicate()方法
- 12. 何时使用“getResourceAsStream”方法?
- 13. Rails - 使用别名调用模型或助手的方法
- 14. Kotlin扩展方法作为长方法名的别名?
- 15. 从别名方法调用超级方法
- 16. Mixpanel无法识别使用“别名”或“识别”的用户
- 17. 如何使用别名在
- 18. 如何使用AS别名
- 19. 如何使用Python中的方法引用方法名称?
- 20. 在Update语句中使用表别名的好方法?
- 21. 扩展使用类别具有相同方法的类名
- 22. 在Rails中使用别名find_by方法ActiveRecord
- 23. 使用匿名方法
- 24. WPF:UnauthorizedAccessException使用匿名方法
- 25. 调用方法时的类名称的使用方式与方法
- 26. 如何在Java中使用该方法查找方法名称?
- 27. nohup使用别名
- 28. 使用别名sqlachemy
- 29. Bash别名使用!$
- 30. Java变量别名解决方法