我在rails中有一个站点,并希望在站点范围内进行设置。 如果发生特定事件,我的应用程序的一部分可以通过SMS通知管理员。 这是我希望通过站点范围设置进行配置的function示例。 所以我在想我应该有一个环境模型或其他东西。 它需要是一个模型,因为我希望能够使用has_many:SMS通知的联系人。 问题是数据库中只能有一个用于设置模型的post。 所以我在考虑使用Singleton模型,但这只会阻止创建新对象吗? 我还需要为每个属性创建getter和setter方法,如下所示: def self.attribute=(param) Model.first.attribute = param end def self.attribute Model.first.attribute end 直接使用Model.attribute可能不是最佳实践,但总是创建它的实例并使用它吗? 我该怎么办?
我正在用方法foo编写一个模块,它在接收者的类上调用类方法bar 。 我当前的方法是使用self.class.bar ,除非在实例类中定义类方法而不是“真实”类方法,否则它工作正常: module M def foo self.class.bar end end obj = Object.new class < NoMethodError: undefined method `bar’ for Object:Class 这是有道理的,因为obj.class不返回单例类。 我可以改用obj.singleton_class ,一切都会顺利进行: module M def foo self.singleton_class.bar end end obj = Object.new class < 42 只有在单个类上定义方法的原因与上述相同。 更糟糕的是,它为每个接收器创建了一个新的单例类,我想避免这些类,因为这些可能是相当数量的对象。 所以相反,我想要一些方法来检索对象的单例类, 当且仅当它已经被定义时,即类型为obj.has_singleton_class ? obj.singleton_class : obj.class obj.has_singleton_class ? obj.singleton_class : obj.class 。 我找不到任何方法来执行此检查。
在java中我会创建这样的东西: private static MyClass instance; public static MyClass getInstance() { if(instance != null) { return instance; } instance = new MyClass(); return instance; } 在ruby中获取相同function的适当方法是什么? 更新:我读过’包含Singleton’,但是当我尝试在Ruby 1.9上使用irb时,我得到了: [vertis@raven:~/workspace/test]$ ruby -v ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-darwin9.4.0] [vertis@raven:~/workspace/test]$ irb irb(main):001:0> class TestTest irb(main):002:1> include Singleton irb(main):003:1> end NameError: uninitialized constant TestTest::Singleton from (irb):2:in `’ from (irb):1 […]
使用rails中的singleton mixin我可以在rails app的范围内创建一个单例类。 但我想知道有没有办法在特定请求的范围内创建它?
我正在阅读Ruby中的Singletons。 我以前从来没有真正需要使用它们,但我很好奇并决定查看它们,看看我是否应该在过去使用它们,或者如果我知道它们是什么我将来也可以使用它们用于。 我能想到的唯一一次使用它是: ? 当我需要一个特殊的对象。 示例:“智能” Hash对象,其行为类似于普通的Ruby哈希,并带有一些额外的怪癖。 当我想要它时,只能存在一个类的一个实例。 但是,我不确定我是否需要上述任何一种。
单例模式是一种设计模式,用于将类的实例化限制为一个对象实例。 虽然我知道如何用C ++和Java编写单例模式,但我想知道是否有人知道如何在Ruby中实现它?
类方法和单例方法是相同还是不同? 这是一个例子。 class C def self.classmethod puts “class method #{self}” end end C.classmethod # class method C c = C.new def c.singletonmethod puts “instance method #{self}” end c.singletonmethod # instance method #
我正在尝试用Ruby编写最安全的单例。 我是这种语言的新手,它非常有弹性,我没有强烈的感觉,我的单例类将成功创建一个实例。 作为奖励,我希望该对象只有在真正使用时才会被实例化。
当我实现“实例”/单例类型模式时,RubyMine通知使用类变量被认为是错误forms。 我遇到的唯一信息是使用类变量可以使inheritance有点松散。 以下代码会给我带来什么问题还有其他原因吗? class Settings private_class_method :new attr_accessor :prop1 attr_accessor :prop2 @@instance = nil def Settings.instance_of @@instance = new unless @@instance @@instance end def initialize @prop2 = “random” end end 此外,有没有更好的方法,从Ruby方面来说,实现相同的目标,以确保只有一个实例?
Module#singleton_class的反转是什么? 即,给定一个单例类,我怎样才能使模块成为单例?