Ruby Hash的has_key?与member?方法:二者是否存在差异?
Ruby Hash的has_key?与member?:无差异,只是别名设计
嘿,这个问题问到点子上了!其实在Ruby里,Hash#has_key?和Hash#member?完全没有功能或性能上的差异——它们就是同一个方法的不同名称,完完全全是Ruby「多途实现」(别名设计)的典型体现。
Ruby的设计哲学里很重视代码的可读性和开发者的表达习惯,所以经常会给同一个核心功能提供多个语义相近的方法名。比如:
- 如果你更习惯从「哈希是否包含某个键」的角度思考,会倾向于用
has_key? - 如果你觉得「某个键是不是这个哈希的成员」更符合你的表达逻辑,就会更喜欢
member?
本质上它们做的都是同一件事:检查传入的参数是否是哈希中的一个键。举个实际的代码例子你一看就懂:
user_info = { username: "ruby_dev", level: 5 } # 两个方法的输出完全一致 puts user_info.has_key?(:username) # => true puts user_info.member?(:username) # => true puts user_info.has_key?(:rank) # => false puts user_info.member?(:rank) # => false
顺带提一句,其实Hash#key?也是它们的另一个别名,三个方法在功能、性能上没有任何可测量的区别,选哪个全看你写代码时的个人偏好。
内容的提问来源于stack exchange,提问作者user1134991
相关产品推荐
相关产品推荐

