【发布时间】:2016-08-31 04:07:15
【问题描述】:
我有这种形式的代码:
class String
def is_jpg?
start_with? "\xFF\xD8\xFF".b
end
end
String#b 返回一个字符串的副本,但编码为 ASCII-8BIT。我的问题
ruby 解释器是否足够聪明,可以缓存上例中 b() 的结果,以便为不同的 String 实例调用此方法不必为每个实例创建一个新的 "\xFF\xD8\xFF" 副本时间?或者我应该这样做:
class String
JPG_SIGNATURE = "\xFF\xD8\xFF".b
def is_jpg?
start_with? JPG_SIGNATURE
end
end
答案是否取决于 ruby 版本和/或解释器?我正在使用 MRI 2.2.x 即将成为 2.3.x。
【问题讨论】:
-
您不能将
b方法的结果保存为常量吗? -
@davidhu2000 这就是他在上个sn-p中所做的。
-
顺便说一句,您不应该使用
is_前缀。该方法应该被称为jpg?。