[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