gpt4 book ai didi

ruby-on-rails - 为什么 Rails 实现方法 String#starts_with?而不是 start_with 的别名?

转载 作者:数据小太阳 更新时间:2023-10-29 08:40:28 24 4
gpt4 key购买 nike

Ruby on Rails 有方法 String#starts_with?,它是用 Ruby 实现的

# File lib/active_support/core_ext/string/starts_ends_with.rb, line 22
def starts_with?(prefix)
prefix = prefix.to_s
self[0, prefix.length] == prefix
end

而从 1.8.7 版本开始,Ruby 具有方法 String#start_with?,它是用 C 实现的

static VALUE
rb_str_start_with(int argc, VALUE *argv, VALUE str)
{
int i;

for (i=0; i<argc; i++) {
VALUE tmp = rb_check_string_type(argv[i]);
if (NIL_P(tmp)) continue;
rb_enc_check(str, tmp);
if (RSTRING_LEN(str) < RSTRING_LEN(tmp)) continue;
if (memcmp(RSTRING_PTR(str), RSTRING_PTR(tmp), RSTRING_LEN(tmp)) == 0)
return Qtrue;
}
return Qfalse;
}

为什么他们不直接使用从 starts_with?start_with? 的别名?

他们是希望保持与 Ruby 1.8.6 的兼容性,还是担心 start_with? 可能与 starts_with? 有不同的行为,或者他们没有看到需要更新代码?

最佳答案

从您的代码来看,您手头的 Rails 版本似乎非常旧 (<= 2.3.5)。由于此版本支持还没有 start_with? 的旧 Ruby 版本,因此他们手动实现了它。

但是,如果您查看上面的文件,您会发现他们使用了 ruby​​ 内置方法(如果可用)。在不再支持 Ruby 1.8.6 的较新 Rails 版本中,这些魔法位 were removed ActiveSupport 现在提供无条件别名。

关于ruby-on-rails - 为什么 Rails 实现方法 String#starts_with?而不是 start_with 的别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8044183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com