Q. Встраивание tcl в ruby [.] Есть ли способ сделать это?
я сталкивался
этот пост
от
Мац
Сам в 2005 году из ветки под названием «Запусти TCL в ruby».
Его пример программы (из поста) оценивает строки кода Tcl из Ruby без выделения:
require 'tcltklib'
def test
ip1 = TclTkIp.new
puts ip1._eval('button .lab -text exit -command "destroy ."').inspect
puts ip1._eval('pack .lab').inspect
puts ip1._eval(%q+puts [ruby {print "print by ruby\n"; 'puts by tcl/tk'}]+).inspect
TclTkLib.mainloop
end
test
Его консольный вывод:
".lab"
""
print by ruby
puts by tcl/tk
""
Цитата из его поста:
Расширение tcltklib, которое поставляется со стандартным дистрибутивом, вызывает интерпретатор Tcl напрямую без какого-либо межпроцессного взаимодействия.
Чтобы это работало, мне нужно было продублировать следующие каталоги:
/c/Ruby/lib/tcltk/tcl8.5
как /c/Ruby/lib/tcl8.5
/c/Ruby/lib/tcltk/tk8.5
как /c/Ruby/lib/tk8.5
(Возможно, ваш Ruby установлен где-то еще.)
Q. Я хотел бы использовать это в системе без GUI (x windows).
В ответном сообщении, расположенном непосредственно под заголовком Матца, Хидетоши Нагаи говорит:
Если нет необходимости в Tk, можно создать IP без Tk. Чтобы сделать это, пожалуйста, позвоните TclTkIp.new(nil, false)
.
Итак, вот программа Матца, измененная для запуска без графического окна Tk:
require 'tcltklib'
def test
# nil, false means without Tk:
ip1 = TclTkIp.new nil, false
puts ip1._eval('list { aa bb cc }').inspect
puts ip1._eval('set list { aa bb cc }; join $list ""').inspect
TclTkLib.mainloop
end
test
Его консольный вывод:
"{ aa bb cc }"
"aabbcc"
Эти две программы работали для меня, используя Ruby 2.2.5 (с Tk 8.5.12) в Windows 7.
Для чего это стоит, вот
руководство
для tcltklib
.