module Douban
FILE ="#{Rails.root}/config/douban.yml"
include Jconfig
end
module Jconfig
def self.included(receiver)
receiver.send :include, Config
end
module Config
#这里怎样才能获取到Douban::FILE这个常量?其中一个办法是上面self.included的时候把receiver里面的东西传进来,但是如果是要在Douban::Config这个域里面怎样才能获取上层module的常量呢?
end
end
确实有这类问题,会涉及到嵌套引用了,这个上次好像在哪看到个 gem 可以解决这个问题,
简单点解决的话就是把 FILE
放到 Jconfig::Config
内
#2 楼 @ShiningRay 在动态生成的 Douban::Config 里面获取 Douban::FILE 常量
#4 楼 @tumayun 因为每个要 include Jconfig 的 module 里面的 FILE 都是不同的,所以不能直接设在 Config 里头
是这个意思吗?
# encoding: UTF-8
module Douban
FILE ="/config/douban.yml"
end
module Jconfig
def self.included(receiver)
receiver.send :include, Config
end
module Config
def self.included(receiver)
puts receiver::FILE
end
end
end
module Douban
include Jconfig
end
1 module Douban
2 FILE ="/home/lcq"
3 Jconfig = Module.new do
4 def self.included(receiver)
5 receiver.send :include, Config
6 end
7
8 Config = Module.new do
9 puts FILE
10 def self.say
11 puts self
12 end
13 end
14 end
15
16 include Jconfig
17 end
18
19 Douban::Jconfig::included Douban
20 Douban::Config::say
是不是这样?
module Douban
FILE="test constant"
# include ::Jconfig
end
module Jconfig
def self.included(receiver)
receiver.send :include, Config
end
module Config
puts ::Douban::FILE
end
end
这种情况需要定义在同一个文件中,但是 include ::Jconfig
这句就不能用了。
#6 楼 @hhuai
#9 楼 @zlx_star
#7 楼 @jiffies
不好意思,比较忙迟了回复
@hhuai 想获取上层常量 FILE 的方式并不是 include 的时候指定进去,而是想动态运行时获取,例如通过 Config 里面指定的一个方法,Douban::Config.example_method
@zlx_star @jiffies 的确可以通过同一域 new 的方式解决,但这种方式写的时候其实默认已经知道了 FILE 的存在,并不是运行时去获取。本人的问题是许多 Module 已经写定了,本来是想通过一 include Jconfig 后,每个模组下都有个 Config 的命名空间,去处理原来 module 定义后的 FILE,解决这个问题也有很多方法
现在问题是,ruby 能在运行时获取上层命名空间(or module)里面的常量吗?