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
而Ruby,从版本1.8.7开始,有方法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?
有不同的行为,或者他们没有看到更新代码的需要?
答案 0 :(得分:4)
从您的代码中,看起来您手头有一个非常旧版本的Rails(&lt; = 2.3.5)。由于此版本支持较旧的Ruby版本,但尚未使用start_with?
,因此他们手动实现了它。
但是,如果您在文件中查看上面的内容,您会看到他们使用了ruby内置方法(如果可用)。在删除了Ruby 1.8.6支持的较新Rails版本中,这些魔术位were removed和ActiveSupport现在提供了无条件别名。