锁定老帖子 主题:ruby可以做嵌入语言不
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-08-08
最后修改:2011-08-08
脚本A中有 OS="WIN7" 在脚本B中可能会执行: case(OS) when "WIN7": /// ... 这样的需求,在javascript中,可以通过jsruntime, jscontext和jsobject来和其他脚本做沟通,但是我找不到ruby中有context这样的东西,可以让我把全局函数和变量放进去让脚本B用...(IronRuby的DLR context是可以做到这个的),是我弄错了吗? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-08-08
嗯当然可以嵌入用。有些游戏引擎还就是拿Ruby当嵌入脚本用的。
老文章例如这篇 http://metaeditor.sourceforge.net/embed/ 没有Context之类的对象,你需要的是一些全局函数。嗯这也是MRI不适合嵌入的一个方面 = = |
|
返回顶楼 | |
发表时间:2011-08-08
这个需求不能用eval么?
PC = Struct.new(:os, :memory, :cpu) pc = PC.new("WIN", "4G", "XXX") pc.instance_eval("os == 'WIN' or memory == '2G'") |
|
返回顶楼 | |
发表时间:2011-08-08
QuakeWang 写道 这个需求不能用eval么?
PC = Struct.new(:os, :memory, :cpu) pc = PC.new("WIN", "4G", "XXX") pc.instance_eval("os == 'WIN' or memory == '2G'") Ruby的感觉就是有点dirty,只有一个Context,啥都往里头扔。。。 |
|
返回顶楼 | |
发表时间:2011-08-08
RednaxelaFX 写道 嗯当然可以嵌入用。有些游戏引擎还就是拿Ruby当嵌入脚本用的。
老文章例如这篇 http://metaeditor.sourceforge.net/embed/ 没有Context之类的对象,你需要的是一些全局函数。嗯这也是MRI不适合嵌入的一个方面 = = 没有Context对象,基本MultiThread就玩不动了,看来C族嵌入式语言还是基本该用lua和js啊。 |
|
返回顶楼 | |
发表时间:2011-08-08
ruby里一切都是对象,你一定要这种形式的话,可以如此实现:
class Object OS = "WIN7" end case(OS) when "WIN7": puts "hi" else puts OS end |
|
返回顶楼 | |
发表时间:2011-08-09
最后修改:2011-08-09
另外,关于运行平台检测我觉得应该这样写:
module OS # why not using RUBY_PLATFORM: http://blog.emptyway.com/2009/11/03/proper-way-to-detect-windows-platform-in-ruby/ require 'rbconfig' HOST_OS = Config::CONFIG['host_os'] class << self def is_mac? HOST_OS =~ /darwin/ end def is_windows? HOST_OS =~ /mswin|mingw/ end def is_linux? HOST_OS =~ /linux/ end end end OS.instance_eval do case when is_mac? puts "MAC" when is_windows? puts "WIN" else puts "unknow: #{OS::HOST_OS}" end end |
|
返回顶楼 | |
发表时间:2011-08-09
rainchen 写道 另外,关于运行平台检测我觉得应该这样写:
module OS # why not using RUBY_PLATFORM: http://blog.emptyway.com/2009/11/03/proper-way-to-detect-windows-platform-in-ruby/ require 'rbconfig' HOST_OS = Config::CONFIG['host_os'] class << self def is_mac? HOST_OS =~ /darwin/ end def is_windows? HOST_OS =~ /mswin|mingw/ end def is_linux? HOST_OS =~ /linux/ end end end OS.instance_eval do case when is_mac? puts "MAC" when is_windows? puts "WIN" else puts "unknow: #{OS::HOST_OS}" end end ....这个貌似没啥关系。。我只是随手举个例子而已 |
|
返回顶楼 | |
发表时间:2011-08-09
通常都是起个新解释器进程, 用环境变量设置环境, 用管道传输代码和输出, 各解释器间有公共代码的就fork ... 如果满足不了你的需要, 还是用 lua 吧.
|
|
返回顶楼 | |
发表时间:2011-08-09
最后修改:2011-08-09
night_stalker 写道 通常都是起个新解释器进程, 用环境变量设置环境, 用管道传输代码和输出, 各解释器
间有公共代码的就fork ... 如果满足不了你的需要, 还是用 lua 吧. 俺的脚本引擎为要UI线程服务的哈。 |
|
返回顶楼 | |