- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
为什么self
,在单例类上定义的方法(singleton2
)中,不像其他三种情况那样等于那个单例类?
class A
def self.singleton1
class << self
self
end
end
class << self
def singleton2
self
end
end
end
def singleton3
class << A
self
end
end
p [A.singleton1, A.singleton1.object_id] # [#<Class:A>, 70003841656620]
p [A.singleton2, A.singleton2.object_id] # [A, 70003841656640]
p [singleton3, singleton3.object_id] # [#<Class:A>, 70003841656620]
p [A.singleton_class, A.singleton_class.object_id] # [#<Class:A>, 70003841656620]
最佳答案
我会逐个解释。
def self.singleton1
class << self
self
end
end
在这里,self
方法内部是 A
.现在在方法中您正在创建另一个范围,这是 A
的单例类的范围。 , 使用 class << self
.和 self
当您调用 A.singeton1
时,正在返回单例类的, 作为 self
在 A
的单例类中是方法的最后一条语句 singleton1
.
class << self
def singleton2
self
end
end
在这里,self
在 A
的单例类体内是 单例类 本身。现在你定义了一个单例方法 singleton2
上课A
.在方法内部,最后一个表达式是 self
,它总是会被设置为 receiver
, 这是 A
.还有一件事,def singleton2
创建一个新范围,它不同于 A
的单例类范围.
根据上面的解释,我希望下面的代码输出对你来说一定很清楚:-
class A
def self.singleton1
class << self
self
end
end
class << self
def singleton2
self
end
end
end
A.singleton2 # => A
A.singleton1 # => #<Class:A>
输出 A
和 #<Class:A>
清楚地说,为什么 object_id
s 是不同的。
从上面2个解释,很清楚singleton3
是怎么回事了.
关于ruby - 在单例类上定义的方法中 self 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23272063/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!