Tag:

如何让ruby与一个类共享数据,并将其子类与extend结合使用

module M def f=(x) @f= x end def f @f end end class A extend M end class B < A end Af= 42 puts Af puts Bf 这会产生 42 nil @fa类变量是否为A和B? 如何仅通过将其写入M来共享A和B之间的变量?

跨类的ruby变量范围

RuNubie在这里。 我有一个使用net/IMAP库登录gmail的类Login 。 发生的事情是我创建了该类的新实例,例如: a = Login.new(“username”, “gmail.com”, “passw”) 然后,我正在研究其他类,这些类会对邮箱做一些“东西”。 问题是我在Login中定义的@imap变量似乎已经消失了(由于我假设的范围)。 这就是在Login类中声明@imap方式: @imap = Net::IMAP.new(‘imap.gmail.com’,993,true,nil,false) 所以这: @today = Date.today @received_today = imap.search([“SINCE”, @today.strftime(“%d-%b-%Y”)]).count.to_s …返回错误。 这是我在玩这个时遇到的两个错误。 第一个是当我使用imap ,第二个是当我尝试使用@imap : NameError: undefined local variable or method `imap’ for # NoMethodError: undefined method `search’ for nil:NilClass 处理这种情况的最佳做法是什么? 是唯一的解决方案来定义我的方法,在我创建Net :: IMAP的新实例的同一个类中做“填充”? 将@imap声明为全局变量$imap是一种不好的做法吗? 如此困惑,我打赌答案很简单也很明显,但我只是没有看到它。 谢谢!

ruby pickaxe书说attr_accessor是类方法

在ruby镐书中,有一条线说 attr_accessor是类Module中定义的类方法 但是attr_accessor不是实例方法吗? 我在这里错过了什么吗?

在单表inheritance机制中使用动态创建的类

我有一个名为’DynObject’的ActiveRecord类,可用于inheritance。 在初始化时,我动态创建一些从它inheritance的类: classes_config = { foo: ‘foo’, bar: ‘bar’ } classes_config.each do |name,options| klass = Class.new( DynObject ) do end self.klasses[name] = const_set( “#{name.camelize}DynObject”, klass ) end 这一切都很好,这些类创建得很好..但是当ActiveRecord尝试加载创建的记录时,STI机制失效.. (ActiveRecord::SubclassNotFound (The single-table inheritance mechanism failed to locate the subclass: ‘FooObject’….)) 我认为这很奇怪,因为当我检查类在type列中它们的命名方式时,它们存在… 当我检查这些类的ancestors ,他们也inheritance了… 有可能我想要完成的事情吗? 还有什么需要做的吗?

这个属性如何在ruby类中保存多个属性?

在这里,你看到我们有一个名为“属性”的属性,我们在我们的类中初始化它,所以问题是名称和衬衫属性来自哪里,因为我们不在我们的类中初始化和定义它们? class Shirt attr_accessor :attribute def initialize(attributes) @attributes = attributes end end store = Shirt.new(name: “go”, size: “42”) 当我检查这个衬衫类的实例时,我得到一个哈希: @attributes={:name=>”go”, :size=>”42″} 有人可以帮忙解释一下吗?

Ruby实例方法和变量

有些东西我不了解ruby 类实例变量或方法** 。 所以我有这个代码继续给我这个错误,我无法理解 看起来ruby认为我正在尝试调用Float.in_celsius,但我想在我的类实例中进行此调用。 #———————————– def ftoc(fr) fr = fr.to_f if (fr == 32) c = 0 elsif (fr == 212) c = 100 else c = (fr-32.0)*(5.0/9.0) end return c end def ctof (cl) cl = cl.to_f f = (cl*(9.0/5.0))+32.0 return f end #———————————– class Temperature attr_accessor :in_celsius, :in_fahrenheit #class metods def self.from_celsius(cel) […]

只加载Ruby中使用的类?

如果我加载x.rb , 则加载该文件中的所有类 。 是否可以检查并查看正在使用的类并仅加载这些类? 假设x.rb包含Hello和Goodbye类,并且我的程序只使用Hello类,是否可以只加载Hello类? 很高兴用一个检查文档的脚本,并输出一个只有Hello Class的代码和使用它的代码…如果不存在,那将是一个有趣的github项目,但我认为这不属于我的技能组合atm 。

为什么Class是Class的实例,而不是Object的实例?

Class.instance_of?(Object)返回false ,而Class.instance_of?(Class)返回true 。 我觉得这很令人惊讶,因为我认为作为对象的Class必须是Object类的一个实例。 它怎么可能是它自己的一个实例? 但假设Class是Object类的一个实例,似乎会导致更加混乱的问题; 因为Object是一个类,所以它必须是Class类的一个实例。 这里发生了什么?

在单独的文件中定义时,将Ruby类添加到模块

我想通过将它们放在一个模块中来命名我的Ruby类。 实际上,如果我决定发布我的Ruby gem以使类名不与另一个gem中的现有类冲突,这是一个好主意。 我知道我可以为A::B类做以下事情: module A class B end end 但是,上面的内容非常麻烦,因为我需要将所有类定义放在一个Ruby源文件中,以便将它们放在模块下。 我宁愿将我的类定义保存在单独的源文件中,就像Java项目一样,那么当它们在单独的文件中定义时,如何将类添加到模块中呢?

使用Class vs Module在Ruby中打包代码

假设我有一堆没有持久状态的相关函数,比如字符串差异包中的各种操作。 我可以在类或模块中定义它们(使用self ),它们可以以完全相同的方式访问: class Diff def self.diff … def self.patch … end 要么 module Diff def self.diff … def self.patch … end 然后我可以做Diff.patch(…) 。 哪个’更好’(或’正确’)? 我需要将它们分组的主要原因是名称空间问题,常用函数名称都在其他地方使用。 编辑:将示例从矩阵更改为差异。 矩阵是一个可怕的例子,因为它确实有状态,每个人都开始解释为什么把它们写成方法而不是回答实际问题更好。 🙁