总的来说,我无法理解Ruby中的一些概念,模块就是其中之一。
我正处于RubyMonk 8.2的最后一步:作为命名空间的模块,我很丢失。我该怎么办?我的计划是获得解决方案并对其进行逆向工程,但是没有解决方案按钮,所以我被卡住了:(
说明如下:
如果你在没有父项的情况下使用::前置一个常量,那么范围就会发生在最顶层。在本练习中,在Kata模块之外的最高级别中,按照A = 10更改push返回10。
已经填写的代码是:
module Kata
A = 5
module Dojo
B = 9
A = 7
class ScopeIn
def push
A
end
end
end
end
A = 10
答案 0 :(得分:1)
所以,你想要这个:
module Kata
A = 5
module Dojo
B = 9
A = 7
class ScopeIn
def push
::A # change this line from A to ::A, meaning ::A will refer to the top-level namespaced A which is defined outside the Kata module (A = 10)
end
end
end
end
A = 10
p Kata::Dojo::ScopeIn.new.push
# => 10
如果在没有父项的情况下使用::
添加常量,则范围发生在最顶层。在此示例中,push
将返回10
,因为A = 10
位于Kata模块之外的最顶层。
答案 1 :(得分:1)
module Kata
A = 5
module Dojo
A = 7
class ScopeIn
def push0
A
end
def push1
Kata::Dojo::A
end
def push2
Kata::A
end
def push3
::A
end
end
end
end
A = 10
scope = Kata::Dojo::ScopeIn.new #=> #<Kata::Dojo::ScopeIn:0x007fe63c8381d0>
scope.push0 #=> 7
scope.push1 #=> 7
scope.push2 #=> 5
scope.push3 #=> 10