有没有办法baz_method在class Qux没有提到模块命名空间的情况下进入内部?当有许多嵌套模块时,代码看起来不干净.
module Foo
module Bar
module Baz
class Qux
def self.qux_method
Foo::Bar::Baz.baz_method
end
end
def self.baz_method
end
end
end
end
Run Code Online (Sandbox Code Playgroud) 有什么区别:
class A
class B
end
end
Run Code Online (Sandbox Code Playgroud)
和
class A
end
class A::B
end
Run Code Online (Sandbox Code Playgroud)
更新:这两种方法并不完全相同.
在第二种方法中,B无法访问定义的常量A.
另外,正如Matheus Moreira正确指出的那样,在第二种方法中,A必须先定义才能A::B定义.
还有什么其他差异?
随机问题在这里.我不确定是否有这个术语,但我想知道你何时定义一个没有显式接收器的方法,你怎么知道哪个类得到了这个方法?是不是self在这种情况下是什么?
self 在类定义的上下文中是定义的类,使用隐式接收器定义的方法绑定到类,我们一直看到它.
但是,如果我在实例方法中定义一个方法,那么'sub_method'也会被放在外部类中:
[12] pry(main)> class A
[12] pry(main)* def my_method
[12] pry(main)* puts self
[12] pry(main)* def sub_method
[12] pry(main)* puts self
[12] pry(main)* end
[12] pry(main)* end
[12] pry(main)* end
=> :my_method
[13] pry(main)> a = A.new
=> #<A:0x007fa588181d40>
[14] pry(main)> a.my_method
#<A:0x007fa588181d40>
=> :sub_method
[15] pry(main)> a.sub_method
#<A:0x007fa588181d40>
=> nil
[16] pry(main)> A.instance_methods(false)
=> [:my_method, :sub_method]
Run Code Online (Sandbox Code Playgroud)
此外,在顶级的范围,self是main,这是一个实例Object类,但方法来定义有加Object,而不是main小号单例类,这是我基于我怎么看到其他单方法的工作期待什么:
[21] pry(main)> def a.my_singleton
[21] pry(main)* puts …Run Code Online (Sandbox Code Playgroud)