相关疑难解决方法(0)

如何访问父/兄弟模块方法

有没有办法baz_methodclass 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)

ruby

7
推荐指数
2
解决办法
2282
查看次数

"A类; B类"与"A类:: B类"之间的区别

有什么区别:

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定义.

还有什么其他差异?

ruby

6
推荐指数
1
解决办法
1085
查看次数

Ruby什么类在没有明确的接收器时获取方法?

随机问题在这里.我不确定是否有这个术语,但我想知道你何时定义一个没有显式接收器的方法,你怎么知道哪个类得到了这个方法?是不是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)

此外,在顶级的范围,selfmain,这是一个实例Object类,但方法来定义有加Object,而不是main小号单例类,这是我基于我怎么看到其他单方法的工作期待什么:

[21] pry(main)> def a.my_singleton
[21] pry(main)*   puts …
Run Code Online (Sandbox Code Playgroud)

ruby methods

4
推荐指数
2
解决办法
230
查看次数

标签 统计

ruby ×3

methods ×1