相关疑难解决方法(0)

为什么==比eql更快?

我在文档中读取了String类,它eql?是一个严格的相等运算符,没有类型转换,并且==是一个等于运算符,它尝试将其参数的第二个转换为String,并且此方法的C源代码确认:

eql?源代码如下:

static VALUE
rb_str_eql(VALUE str1, VALUE str2)
{
    if (str1 == str2) return Qtrue;
    if (TYPE(str2) != T_STRING) return Qfalse;
    return str_eql(str1, str2);
}
Run Code Online (Sandbox Code Playgroud)

==源代码如下:

VALUE
rb_str_equal(VALUE str1, VALUE str2)
{
    if (str1 == str2) return Qtrue;
    if (TYPE(str2) != T_STRING) {
        if (!rb_respond_to(str2, rb_intern("to_str"))) {
            return Qfalse;
        }
        return rb_equal(str2, str1);
    }
    return str_eql(str1, str2);
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试对这些方法进行基准测试时,我感到惊讶的==是,速度比eql?高达20%快!我的基准代码是:

require "benchmark"

RUN_COUNT = 100000000
first_string = "Woooooha"
second_string …
Run Code Online (Sandbox Code Playgroud)

ruby string benchmarking equality

17
推荐指数
1
解决办法
975
查看次数

标签 统计

benchmarking ×1

equality ×1

ruby ×1

string ×1