问题标签 [eigenclass]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - 从特征类确定类
在 Ruby 中,获取类的 eigenclassFoo
很简单
我对逆运算感兴趣:从 eigenclass 本身获取 eigenclass 的所有者:
我不确定这是否可能,因为 eigenclass 是 的匿名子类Class
,因此Foo
在其继承层次结构中没有出现。检查 eigenclass 的方法列表也不令人鼓舞。eigenclass.name
返回nil
。唯一让我希望这是可能的:
显然,本征类的to_s
方法对所有者有所了解,即使在本征类被实例化时该信息是硬编码的。因此,我知道的唯一方法是一些 hacky 之Object.const_getting
类的
ruby - 在 ruby 类的 eigenclass 中设置实例默认值
这是我设法做到这一点的一种方式。
AThing 中的界面是我想要的最终结果。我真正讨厌(而且我觉得必须有更好的方法来完成)是@stuff = self.class.stuff。
有没有更好的方法来使用 eigenclass 为自身的所有实例设置默认数据集,同时保持“漂亮”的界面?
我想用这样的代码完成的是有一个类方法,比如 add_something ,它将一些东西添加到存储在类变量中的数组中。
当类被实例化时,它将在其初始化方法中使用此数组来设置该实例的状态。
ruby - Ruby 在 Object 中查找类变量而不是特定类
这部分工作:
但如果我尝试特征类:
Ruby 查找@@var1
而Object
不是Example
.
我在 Ruby 1.9.3 和 2.0 中测试了这段代码,结果相同。
为什么会这样?
第二件事,我们能不能把它关掉(这样example.get_var1
就不会在 Object 中寻找类变量了)?
ruby - Ruby eigenclass(sigleton 类)创建了吗?为了哪个?
对 Ruby 元编程感到困惑。
所以从教程中我学到了以下内容:
所以这意味着poop方法已经用于cat对象,它属于String类。从著名的教科书《Ruby 编程》中,通过定义cat.poop,实际发生的是 Ruby 创建了一个匿名类,也就是单例或特征类,现在是cat对象的类,然后原来的String类成为新创建的特征类。
然后这让我很困惑。请参阅以下代码:
3个问题:
在定义poop方法时,似乎没有创建任何新类。或者它是创建的,但是“#class”方法自动将调用重定向到超类的#class?哪个是对的?我们如何检查?
如果我们定义另一个方法,比如cat.run,那么是否会创建另一个特征类?那么类层次结构是什么?
如果cat被重新定义为“kate”,则找不到便便。为什么?大便不应该给猫吃吗?
谢谢!
ruby - 为什么 `class << self` 比 `class << Foo` 打开类对象的 eigenclass 更常见?
Ruby 程序员通常class << self
在类体内使用使用来打开类对象的特征类,如下所示:
但是,我很少看到这种等效形式(假设Foo
已经定义为一个类):
是否有理由更喜欢第一种风格而不是第二种风格?
ruby - 有一个模块单例扩展一个类
我的应用程序中有一个单例,可以跨应用程序重用。我希望该单例从我的类中获取一些默认方法,但也能够自定义模块/特征类。最重要的是,我不想instance
在每次调用实用程序单例时都调用它。
这是一个例子。假设我的默认课程是Universe::Earth
. 然后我想要Earth
在我的应用程序中“扩展”该类的模块。
当它运行时,grow!
是一个NoMethodError
.
尝试了这些方法:
我如何使它工作?
ruby - 从超类初始化子类的类实例变量
鉴于下面代码中的超类,我希望所有子类都有一些实例变量。
下面的代码做到了这一点,但未能为所有可能的子类正确初始化该变量。
我打开了我的超类的特征类。这是代码(也在rubyfiddle中):
我想初始化所有可能的子类。在前两个 put 上,onlySomeSuperClass.variable
被初始化。我不知道如何为所有可能的子类初始化这个变量。有任何想法吗?
我发现的最佳解决方案是延迟初始化变量,覆盖访问器,如下所示:
动机:
我需要给定类的所有子类,我们称之为 Vigilant,能够监视其直接子类上发生的一些事情。此信息存储在类中,因此每个类都有不同的状态。
我不能使用类变量,因为两个类 A < B 将修改同一个变量。我也不能直接访问子类,所以我需要一种方法来为 Vigilant 的所有子类提供存储和检索有关其子类的信息的能力。
通过定义打开 eigen 类的访问器,可以说:
现在所有子类 Bclass B < A; end
都可以这样做B.x
,因为方法(访问器)已添加到其超类 eigen 类中,因此可以在查找中找到。
第一个例子表明 Bx 与 Ax 不同
现在,我真的不明白 x 在哪里;变量,而不是访问器。如果我这样做,B.instance_variables
则[]
与 B.singleton_class.instance_variables 相同
ruby - Ruby - 与 obj 的特征类共享局部变量
我正在尝试根据我传递给其方法MyObject
的哈希来动态定义已初始化的 Ruby 对象上的方法。在方法的主体中,我有以下内容:my_hash
initialize
initialize
这失败了undefined local variable or method 'key' for #<Class:#<MyObject:0x007fc7abw0cra0>>
。任何想法为什么?
它my_hash
是由带有许多骆驼键的 json 响应组成的,因此使用简单的 ruby 方法来获取我想要的值会更方便。
ruby-on-rails - RSpec单元测试特征类:未定义的方法
我正在尝试cumulative_cost
在我的Product model
.
所以我会运行类似Product.where(name:"surfboard").cumulative_cost
假设它返回两条记录,一条成本为 1000,另一条成本为 150,它将返回=> 1150
。
所以这就是我写的测试。
然后,当我运行测试时,它失败了。
任何帮助将不胜感激。