私はbuild_config.rb
とmruby 1.3.0 (2017-7-4)
を使用します。mrubyでconst_getはどのように機能しますか?
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
方法を見つけました。ルビー(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
。ルビーでは、Class.const_get('Hoge::Fuga')
とHoge.const_get('Fuga')
の両方が定数Hoge::Fuga
を与えます。 mrubyでは、Hoge::Fuga
を返すのはHoge.const_get('Fuga')
です。
私は 'const_get'が' mruby'でどのように動作するのか説明できませんが、実際はネイティブのルビーバージョンよりもこの方法が好まれます。私はCコードに精通していません(私は残念ですが)。あなたの質問に対する直接の答えは[mruby 'Module#const_get'](https://github.com/mruby/mruby/blob/master/src/class)です。 .c#L2296)と[ruby 'Module#const_get'](https://github.com/ruby/ruby/blob/trunk/object.c#L2417)のように、' mruby'は軽量であることがわかります – engineersmnky