Ruby中的Hash类方法has_key?和method member?有何区别?

4

Ruby Hash 的这两种方法有区别吗?还是只是“多一种方法而已”?我没有看出两者之间有实质性的差别。
谢谢。


根据 https://apidock.com/ruby/Hash/has_key%3F 和 http://ruby-doc.org/core-2.4.0/Hash.html#method-i-member-3F,它们似乎返回相同的结果。 - Jagdeep Singh
4
FYI Hash.instance_method(:has_key?) == Hash.instance_method(:member?) #=> true 意思是:通过Ruby编程语言中的代码可以证明,哈希表(Hash)中的方法has_key?和member?是等价的。 - Stefan
2个回答

11
根据Ruby源代码has_key?key?include?member? 是相同的实现。

3
要查看方法定义的源代码,请参阅文档,找到您要查找的方法,然后单击该方法以展开并查看实际源代码:

https://ruby-doc.org/core-2.5.0/Hash.html#method-i-member-3F

    rb_hash_has_key(VALUE hash, VALUE key)
    {
        if (!RHASH(hash)->ntbl)
            return Qfalse;
        if (st_lookup(RHASH(hash)->ntbl, key, 0)) {
            return Qtrue;
        }
        return Qfalse;
    }

https://ruby-doc.org/core-2.5.0/Hash.html#method-i-has_key-3F

    rb_hash_has_key(VALUE hash, VALUE key)
    {
        if (!RHASH(hash)->ntbl)
            return Qfalse;
        if (st_lookup(RHASH(hash)->ntbl, key, 0)) {
            return Qtrue;
        }
        return Qfalse;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接