[Ruby] (no subject)
Sergei Dolmatov
sergei at dolmatov.dsb.ru
Thu Mar 6 05:00:10 MSK 2003
On Tue, Mar 04, 2003 at 08:51:50PM +0200, Kirill Shutemov wrote:
> On Tue, 4 Mar 2003 09:53:56 +0800
> Sergei Dolmatov <sergei at dolmatov.dsb.ru> wrote:
>
> > On Mon, Mar 03, 2003 at 10:11:47PM +0300, Кирилл Шутемов wrote:
> > > On Mon, 3 Mar 2003 17:41:37 +0800
> > > Sergei Dolmatov <sergei at dolmatov.dsb.ru> wrote:
> > >
> > > > On Sun, Mar 02, 2003 at 11:18:25AM +0200, Kirill Shutemov wrote:
> > > > > Привет всем,
> > > > >
> > > > > Мне нужен внутрений скриптовый язык для моего проекта. Нужно, чтобы из скриптов можно
> > > > > было вызывать некоторые функции основной программы(написанной на C++). Очень хотелось бы
> > > > > чтобы этим языком был Ruby. Как это можно реализовать?
> > > >
> > > > Насчет С++ не знаю, а, скажем, С реализуется достаточно просто - смотреть
> > > > внимательнее на Extending and embedding Rubby в Pragmatic Programmers
> > > > Guide.
> > >
> > > Я вставил в место, где должен выполняться скрипт следующий текст:
> > > ruby_init();
> > > ruby_script("embedded");
> > > rb_load_file("test.rb");
> > > ruby_run();
> > > скрипт test.rb правильно отрабатывает, но после этого программа сразу завершается. Как c этим бороться?
> >
> > Обсуждение этого было в ruby-talk@, к сожалению, просмотрел этот тред
> > довольно поверхностно, поэтому за точность не ручаюсь. Но насколько я
> > понял - это нормальное поведение ruby_run(), и предлагалось использовать
> > rb_eval().
>
> void goScript(string name)
> {
> ifstream file((char*)name.c_str());
> string buf, str;
>
> if(!file)
> cout << Cannot open script file \"" << name << "\".";
>
> ruby_init();
>
> while(!file.eof())
> {
> getline(file,buf);
> str.append(buf+'\n');
> }
> rb_eval_string(str.c_str());
> }
> Что-то вроде этого?
На первый взгляд - похоже, но проверять, к сожалению, нет времени :\
Если честно, я смотрел на реализацию вызова ruby-скриптов из С в
исходниках vim6.1. Показалось достаточно просто и прозрачно. Единственно -
если надо получать вывод из скрипта, то нужно перенаправить stdout для
ruby - делается это переопределением метода #write для rb_defout.
Подробности, опять же, в исходниках vim - if_ruby.c.
--
Regards,
Sergei Dolmatov.
---
Not only is UNIX dead, it's starting to smell really bad.
-- Rob Pike
More information about the Ruby
mailing list