问题标签 [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.

0 投票
3 回答
270 浏览

ruby - 从特征类确定类

在 Ruby 中,获取类的 eigenclassFoo很简单

我对逆运算感兴趣:从 eigenclass 本身获取 eigenclass 的所有者:

我不确定这是否可能,因为 eigenclass 是 的匿名子类Class,因此Foo在其继承层次结构中没有出现。检查 eigenclass 的方法列表也不令人鼓舞。eigenclass.name返回nil。唯一让我希望这是可能的:

显然,本征类的to_s方法对所有者有所了解,即使在本征类被实例化时该信息是硬编码的。因此,我知道的唯一方法是一些 hacky 之Object.const_getting类的

0 投票
1 回答
229 浏览

ruby - 在 ruby​​ 类的 eigenclass 中设置实例默认值

这是我设法做到这一点的一种方式。

AThing 中的界面是我想要的最终结果。我真正讨厌(而且我觉得必须有更好的方法来完成)是@stuff = self.class.stuff。

有没有更好的方法来使用 eigenclass 为自身的所有实例设置默认数据集,同时保持“漂亮”的界面?

我想用这样的代码完成的是有一个类方法,比如 add_something ,它将一些东西添加到存储在类变量中的数组中。

当类被实例化时,它将在其初始化方法中使用此数组来设置该实例的状态。

0 投票
3 回答
209 浏览

ruby - Ruby eigenclass 意外行为

首先,让我们添加一个方法来检索“从这篇博文复制”的 eigenclass

然后创建一个简单的类

我期待第二个输出

任何线索为什么会这样?

0 投票
1 回答
269 浏览

ruby - Ruby 在 Object 中查找类变量而不是特定类

这部分工作:

但如果我尝试特征类:

Ruby 查找@@var1Object不是Example.

我在 Ruby 1.9.3 和 2.0 中测试了这段代码,结果相同。

为什么会这样?
第二件事,我们能不能把它关掉(这样example.get_var1就不会在 Object 中寻找类变量了)?

0 投票
1 回答
262 浏览

ruby - Ruby eigenclass(s​​igleton 类)创建了吗?为了哪个?

对 Ruby 元编程感到困惑。

所以从教程中我学到了以下内容:

所以这意味着poop方法已经用于cat对象,它属于String类。从著名的教科书《Ruby 编程》中,通过定义cat.poop,实际发生的是 Ruby 创建了一个匿名类,也就是单例或特征类,现在是cat对象的类,然后原来的String类成为新创建的特征类。

然后这让我很困惑。请参阅以下代码:

3个问题:

  1. 在定义poop方法时,似乎没有创建任何新类。或者它是创建的,但是“#class”方法自动将调用重定向到超类的#class?哪个是对的?我们如何检查?

  2. 如果我们定义另一个方法,比如cat.run,那么是否会创建另一个特征类?那么类层次结构是什么?

  3. 如果cat被重新定义为“kate”,则找不到便便。为什么?大便不应该给猫吃吗?

谢谢!

0 投票
1 回答
157 浏览

ruby - 为什么 `class << self` 比 `class << Foo` 打开类对象的 eigenclass 更常见?

Ruby 程序员通常class << self在类体内使用使用来打开类对象的特征类,如下所示:

但是,我很少看到这种等效形式(假设Foo已经定义为一个类):

是否有理由更喜欢第一种风格而不是第二种风格?

0 投票
1 回答
169 浏览

ruby - 有一个模块单例扩展一个类

我的应用程序中有一个单例,可以跨应用程序重用。我希望该单例从我的类中获取一些默认方法,但也能够自定义模块/特征类。最重要的是,我不想instance在每次调用实用程序单例时都调用它。

这是一个例子。假设我的默认课程是Universe::Earth. 然后我想要Earth在我的应用程序中“扩展”该类的模块。

当它运行时,grow!是一个NoMethodError.

尝试了这些方法:

我如何使它工作?

0 投票
1 回答
878 浏览

ruby - 从超类初始化子类的类实例变量

鉴于下面代码中的超类,我希望所有子类都有一些实例变量。

下面的代码做到了这一点,但未能为所有可能的子类正确初始化该变量。

我打开了我的超类的特征类。这是代码(也在ruby​​fiddle中):

我想初始化所有可能的子类。在前两个 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 相同

0 投票
2 回答
161 浏览

ruby - Ruby - 与 obj 的特征类共享局部变量

我正在尝试根据我传递给其方法MyObject的哈希来动态定义已初始化的 Ruby 对象上的方法。在方法的主体中,我有以下内容:my_hashinitializeinitialize

这失败了undefined local variable or method 'key' for #<Class:#<MyObject:0x007fc7abw0cra0>>。任何想法为什么?

my_hash是由带有许多骆驼键的 json 响应组成的,因此使用简单的 ruby​​ 方法来获取我想要的值会更方便。

0 投票
2 回答
123 浏览

ruby-on-rails - RSpec单元测试特征类:未定义的方法

我正在尝试cumulative_cost在我的Product model.

所以我会运行类似Product.where(name:"surfboard").cumulative_cost假设它返回两条记录,一条成本为 1000,另一条成本为 150,它将返回=> 1150

所以这就是我写的测试。

然后,当我运行测试时,它失败了。

任何帮助将不胜感激。