@MrPasserby @jimrokliu 基于网页,多人语音。
这个不是 4.1 就有吗?
@kepaning 从代码上看是没有明显的调用,不过可以起到防患未然的作用
@kepaning 我上面只是举个例子,test
代表了在ClassMethods
中定义的实例方法
@outman @kepaning
仔细研究了下,发现源码没有问题
第一个 extend AllowedFormatsDeprecation
是为了处理 下面这种情况的
HTTParty::AllowedFormats
的常量调用
第二个extend AllowedFormatsDeprecation
是为了处理在ClassMethods
里面的方法的常量调用
module ClassMethods
def test
AllowedFormats
end
end
*为了更好的理解上面的解释,还需要特别注意我们在include
和extend
module
的时候,base
的 mixing 方法实际上只是对应module
方法的一个引用。
pry(main)> ls Test
Out::ClassMethods#methods: test_const
pry(main)> ls Mixing
Mix#methods: b
这也是为什么需要第二个 extend AllowedFormatsDeprecation
的原因
@outman 我已经在 github 上提了一个 issue,有回馈这边会更新
成都的 ruby 不少呀,怎么不来顶起
可以 remote 吗
嗯,好东西!
赞!
自己研究了下,下面是一些成果
ActiveSupport::Cache::DalliStore#with_local_cache
def with_local_cache
use_temporary_local_cache(LocalStore.new) { yield }
end
def use_temporary_local_cache(temporary_cache)
save_cache = LocalCacheRegistry.cache_for(local_cache_key)
begin
LocalCacheRegistry.set_cache_for(local_cache_key, temporary_cache)
yield
ensure
LocalCacheRegistry.set_cache_for(local_cache_key, save_cache)
end
end
def write(name, value, options=nil)
options ||= {}
name = expanded_key name
instrument(:write, name, options) do |payload|
with do |connection|
options = options.merge(:connection => connection)
write_entry(name, value, options)
end
end
end
def write_entry(key, entry, options) # :nodoc:
local_cache.write_entry(key, entry, options) if local_cache
super
end
然后解释下上面的代码,如果我们把平时使用缓存的代码,比如 Rails.cache.write('name', 'key') 作为方法 with_local_cache 的参数,那么最终会产生一个结果,那就是会有两个地方缓存了这对 key,value。一个地方就是 LocalCache,另一个地方就是我们指定的 Rails 缓存。
有了以上的这些理解,我们再来看看官方的解释
是不是有一种恍然大悟的感觉!
不得不感叹!不是别人的代码太晦涩,只是因为我们看不懂注释!
自己顶一下!
那就再顶一个!
经典好帖!
看到了 remote,果断进来先赞一个!
嗯,很赞
@liy_j 如果说模块里面的实例方法是用来给 include 或者是 extend 他的类做扩展用,那么模块的类方法又有什么实际的用处呢?
跟 resque 如此相似,希望 LZ 能将他们做个对比,期待后续!