在ruby中嵌入tcl
有没有办法做到这一点?似乎唯一可行的方法是使用ruby/tk并通过该api创建一个tcl解释器。但是,我希望在没有GUI(x窗口)的系统上使用它。我别无选择了吗在ruby中嵌入tcl,ruby,tcl,Ruby,Tcl,有没有办法做到这一点?似乎唯一可行的方法是使用ruby/tk并通过该api创建一个tcl解释器。但是,我希望在没有GUI(x窗口)的系统上使用它。我别无选择了吗 谢谢如果您在命令行上,您可以向tclsh发送命令。tcl还有一个C api,所以如果没有预先存在的方法,您应该能够使用它将tcl嵌入ruby中 如果您可以在Tcl的C API中调用任意简单函数,那么关键函数有: Tcl\u FindExecutable–首先调用此函数初始化库 Tcl_CreateInterp–这将返回新执行上下文的句
谢谢如果您在命令行上,您可以向tclsh发送命令。tcl还有一个C api,所以如果没有预先存在的方法,您应该能够使用它将tcl嵌入ruby中 如果您可以在Tcl的C API中调用任意简单函数,那么关键函数有:
–首先调用此函数初始化库Tcl\u FindExecutable
–这将返回新执行上下文的句柄Tcl_CreateInterp
–这会评估脚本;返回常量Tcl_Eval
(0)或TCL\u OK
(1)(或一些在一般代码中罕见的其他常量)TCL\u ERROR
–返回结果值(或错误消息)Tcl_GetResult
–这将清除结果值Tcl\u ResetResult
–也许你能猜出这是什么Tcl\u DeleteInterp
Tcl_GetVar
和Tcl_SetVar
访问上下文中的“全局”变量;这是传递可能不是有效脚本的值的非常方便的方法
将tcl嵌入ruby[。]有什么方法可以做到这一点吗
我偶然发现
通过
2005年,他在一个名为“用ruby运行TCL”的帖子中写道
他的示例程序(来自post)评估Ruby中的Tcl代码字符串,而不进行以下处理:
需要“tcltklib”
def测试
ip1=TclTkIp.new
放置ip1._eval('button.lab-text exit-command“destroy.”)。检查
放置ip1._eval('pack.lab')。检查
puts ip1._eval(%q+puts[ruby{print“print by ruby\n”;'puts by tcl/tk'}]+)。检查
TclTkLib.mainloop
结束
测试
其控制台输出为:
".lab"
""
print by ruby
puts by tcl/tk
""
"{ aa bb cc }"
"aabbcc"
引用他的帖子:
标准发行版附带的tcltklib扩展直接调用Tcl解释器,而无需任何进程间通信
为了使其正常工作,我需要复制以下目录:
/c/Ruby/lib/tcltk/tcl8.5
as/c/Ruby/lib/tcl8.5
/c/Ruby/lib/tcltk/tk8.5
as/c/Ruby/lib/tk8.5
TclTkIp.new(nil,false)
下面是Matz的程序,它被修改为在没有Tk图形窗口的情况下运行:
需要“tcltklib”
def测试
#无,假表示没有Tk:
ip1=TclTkIp.new无,假
放置ip1._eval('list{aa bb cc}')。检查
放置ip1._eval('set list{aa bb cc};join$list”“)。检查
TclTkLib.mainloop
结束
测试
其控制台输出为:
".lab"
""
print by ruby
puts by tcl/tk
""
"{ aa bb cc }"
"aabbcc"
这两个程序在Windows7上使用Ruby 2.2.5(含Tk 8.5.12)对我来说很有效
值得一提的是,以下是
对于
tcltklib
Python的Tkinter允许用户创建不加载Tk的Tcl解释器实例(参数useTk
forTk
的构造函数)。也许Ruby的包装器也需要?为什么你需要嵌入它而不是外壳呢?你看了吗?有没有办法指定tcl解释器的路径?使用mkmf.rb
,你需要have\u library
或find\u library
。我不是一个优秀的Ruby程序员,不会告诉你如何充分利用这个API。