【发布时间】:2018-05-28 08:31:30
【问题描述】:
我使用mruby 1.3.0 (2017-7-4) 和build_config.rb:
MRuby::Build.new do |conf|
if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
toolchain :visualcpp
else
toolchain :gcc
end
enable_debug
conf.gembox 'default'
conf.gem :git => 'https://github.com/mattn/mruby-uv'
conf.gem :git => 'https://github.com/mattn/mruby-http'
conf.gem :git => 'https://github.com/iij/mruby-socket'
conf.gem :git => 'https://github.com/luisbebop/mruby-polarssl.git'
conf.gem :git => 'https://github.com/iij/mruby-digest'
conf.gem :git => 'https://github.com/iij/mruby-pack'
conf.gem :git => 'https://github.com/matsumoto-r/mruby-simplehttp.git'
conf.gem :git => 'https://github.com/matsumotory/mruby-httprequest'
conf.gem :git => 'https://github.com/iij/mruby-aws-s3.git'
end
MRuby::Build.new('host-debug') do |conf|
if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
toolchain :visualcpp
else
toolchain :gcc
end
enable_debug
conf.gembox 'default'
conf.cc.defines = %w(MRB_ENABLE_DEBUG_HOOK)
conf.gem :core => "mruby-bin-debugger"
end
MRuby::Build.new('test') do |conf|
if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
toolchain :visualcpp
else
toolchain :gcc
end
enable_debug
conf.enable_bintest
conf.enable_test
conf.gembox 'default'
end
我发现 mruby 中的 const_get 方法与 ruby 中的不同。在 ruby (2.4.0p0) 中,Class.const_get('Fixnum') 返回常量 Fixnum,而在 mruby 中,Class.const_get('Fixnum') 导致错误 uninitialized constant Class::Fixnum (NameError)。
然后,我尝试了另一个示例:class Hoge; end; class Hoge::Fuga; end。在 ruby 中,Class.const_get('Hoge::Fuga') 和 Hoge.const_get('Fuga') 都给出常量 Hoge::Fuga。在 mruby 中,只有Hoge.const_get('Fuga') 返回Hoge::Fuga。
【问题讨论】:
-
虽然我无法向您解释
const_get在mruby中的工作原理,但实际上我更喜欢这种方法而不是原生 ruby 版本。我不太精通 C 代码(我知道可耻),但您的问题的直接答案是 mrubyModule#const_get和 rubyModule#const_get,因为您可以看到mruby是轻量级的,并且实现也较轻跨度>