问题标签 [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 中的类定义
最近在研究 Ruby 中类的一些细节,被类定义弄糊涂了。
在Ruby中,类定义如下,
和它一样
然后我很困惑。对于第一种情况,self可以看成是一个指向当前使用对象的指针,上下文的当前类是A。方法查找是递归完成的。但我的问题是,def是做什么的?它如何改变当前对象和上下文?第二种情况的问题是一样的。class << self之类的描述如何改变当前对象和上下文?
还有一个问题。据我所知,所有 Class 对象都遵循 Fly-weight 等设计模式,因为它们共享具有相同定义的相同 Class 对象。然后特征类变得混乱。既然eigenclass中的def其实是用Class对象定义了一个方法,那怎么会和“def self.*”相关呢?
从外面看起来太复杂了,我可能需要Ruby的设计细节。
ruby - 元编程:当我们调用在类方法中定义的实例方法时,方法分派在哪里?
我正在阅读Metaprogramming Ruby,只是想澄清一下以下释义代码:
Q1
我的第一个问题是关于文件末尾的两个方法调用:my_class_method :foo
和my_class_method :bar
. 我是否认为在实例化 MyClazz 对象时它们都会自动调用?
Q2当 Ruby 生成这些方法 (def foo
和def bar
) 时,它会将它们放在MyClazz 的eigenclass 中,即使它们是实例方法。那么这是否意味着 Ruby 在需要时会针对类和实例方法查找 eigenclass?
我只是想在我深入本书之前澄清这一点。
ruby - 如何找到私有单例方法
我已经定义了一个Vehicle
这样的模块
调用Vehicle.singleton_methods
返回[:build]
。
如何检查由定义的所有私有单例方法Vehicle
?
ruby - Ruby中的类和该类的单例有什么区别?
好的,所以我正在尝试在 Ruby 中进行一些元编程,但我有点困惑。根据我读过的几篇文章(如这篇文章),为了向 Ruby 类动态添加类方法,您必须使用该类的单例类:
为什么会这样,这和这有什么不同?
(对不起,如果这个问题包含任何错误的假设。就像我说的,我有点困惑。)
ruby - 知道一个类是否是一个特征类
判断一个类some_class
是否是某个对象的特征类的最佳方法是什么?
ruby-on-rails - 类方法上的 ActiveSupport::Callbacks
是否可以ActiveSupport::Callbacks
在类方法上使用?更具体地说,在下面的模块中,你会在哪里include ActiveSupport::Callbacks
创建define_callbacks
和run_callbacks
共享相同的状态?
更新
如果有可能,但我无法确定,那肯定不是ActiveSupport::Callbacks
为它设计的。最好在#handle
.
ruby - 隐式上下文和特征类
我最近发现了一篇关于 Ruby 中的隐式上下文的有趣文章,我发现这段经历非常开放。我知道 Ruby 不仅包含对self
(默认方法接收器)的引用,还包含对当前类(也称为默认定义或`klass'
)的引用。
从文章中,假设class
定义将当前类self
和当前类都设置为正在定义的类应该是正确的;就我们考虑普通的方法定义(即不使用点语法来定义单例方法)而言,在方法定义的上下文中,用def
,self
指的是接收对象,并且当前类没有改变。
我认为不考虑点语法来定义是安全的原因是 Ruby 还提供了一种打开类的特征类的显式方法,而我感兴趣的是了解在打开特征类时如何管理这两个隐式上下文.
使用def
众所周知的语法打开一个特征类:
将 foo 定义为 的单例方法,A
即其 eigenclass 的实例方法(be it A'
)。这段代码也会打印#<Class:A>
,所以说<<
语法将当前类self
和当前类都设置为正确A'
吗?
ruby - 为什么模块的单例方法在混合的下游特征类中不可见?
我了解常规方法查找路径,即class, superclass/module, all the way up to BasicObject
. 我认为对于单例版本的链也是如此,但当您在元链中混合模块时似乎并非如此。如果有人能解释为什么在我将这个模块包含在 Vehicle 的 eigenclass 中时,为什么在下面的示例中调用Automobile
模块的banner
方法而不是它的单例版本,我将不胜感激。
ruby - 调用eigenclass的类方法
我需要为类的某些实例覆盖类方法
有没有办法在不显式获取特征类的情况下调用覆盖方法?
ruby - 如何在 Ruby 中获取与给定单例(或特征)类对应的对象?
假设以下代码:
有什么办法可以从中得到a
吗As
?