Ruby中是否存在可调用于对象以返回其自身的方法?
在Ruby中获取返回自身的方法
嘿,这个问题问得挺有意思!确实,Ruby里没有名为self的方法(因为self是个关键字,不是方法标识符),所以你尝试的arr.group_by(&:self)会报错NoMethodError。不过我们有完美的替代方案:
1. 使用Object#itself(推荐)
Ruby 2.2及以上版本引入了itself方法,它的作用就是返回调用它的对象本身,完全符合你的需求!用它来实现你的分组需求非常简洁:
arr = [1,1,2,3,3,3] grouped = arr.group_by(&:itself) # 输出结果:{1=>[1, 1], 2=>[2], 3=>[3, 3, 3]}
这个方法是Ruby官方提供的,安全且通用,除了group_by,在任何需要元素返回自身的场景都能用上,比如arr.select(&:itself)(会过滤掉nil和false,因为它们的itself就是自身,会被转为布尔值判断)。
2. 手动定义一个返回自身的方法(兼容旧版本Ruby)
如果你还在使用Ruby 2.2之前的版本,可以给Object类添加一个自定义方法来实现这个功能:
class Object def return_self self end end # 然后就可以这样用: arr = [1,1,2,3,3,3] grouped = arr.group_by(&:return_self)
不过要注意:给Ruby核心类(比如Object)添加方法可能会和其他库的方法冲突,所以如果是在项目中使用,最好考虑用模块扩展或者更限定的范围,而不是直接修改全局Object类。
总结一下,itself就是你要找的那个“返回自身”的方法,用它替代&:self就能完美实现你的需求啦!
内容的提问来源于stack exchange,提问作者Max Williams
相关产品推荐
相关产品推荐

