是什么class << self在Ruby中做什么?
我想了解class << self下一个例子中的含义.
module Utility
class Options #:nodoc:
class << self
def parse(args)
end
end
end
end
Run Code Online (Sandbox Code Playgroud) 我第一次跳进rails编程,在查看我下载的一些库的代码时,我偶尔会注意到代码:
class << self
def func
stuff
end
end
Run Code Online (Sandbox Code Playgroud)
我已经尝试在网上搜索一下解释,但是<< ???从最有用的搜索引擎中删除了,所以它最终只是搜索类自我,这不是很有用.任何见解将不胜感激.
我试图将类的实例化限制为只有一个(不使用单例),但我不能.我尝试使用类变量(@@),但没有运气.我用Google搜索并发现了这个:
class A
@count = 0
class << self
attr_accessor :count
end
def initialize val
@a = val
self.class.count += 1
end
end
a=A.new 42
b=A.new 43
Run Code Online (Sandbox Code Playgroud)
我搜索了"类"自我 "的解释,希望找到一个更好的(或者只是一个更简单和干净),但是反过来,没有运气.最后,经过一些测试后我得出结论,'class << self '只是一个块包装器,你可以在其中定义类方法.那么,这是正确的吗?
问候!
我有一个关于Rails最佳实践的问题。在我的rails项目中,我有以下代码:
class MyController < ApplicationController
def some_method
@product = MyFabricatorClass.new.create_product
end
...
end
Run Code Online (Sandbox Code Playgroud)
MyFabricatorClass不依赖于某些状态,并且其行为是恒定的。我也在做很多C ++的工作,对我来说,总是实例化一个新的MyFabricatorClass对象似乎有点效率低下。在C ++项目中,我会适当地使用类似以下内容的东西:
class MyController < ApplicationController
@@my_fabricator = nil
def some_method
@@my_fabricator ||= MyFabricatorClass.new
@product = @@my_fabricator.create_product
end
...
end
Run Code Online (Sandbox Code Playgroud)
这种样式在Rails中也合法吗?典型的Rails方式是什么?
感谢您的任何建议...!