2013-02-11 3 views
1

Я пытаюсь написать сценарий в Ruby, который в интерактивном режиме генерирует некоторые входные данные для программы. Идея заключается в использовании QtRuby, когда она существует, в противном случае используется консоль. То, что я пробовал, - этоКак сделать Ruby частично разобрать исходный код?

begin 
    require "Qt4" 
rescue LoadError => load_err 
    puts "Qt not found, using console" 
end 

class ConsoleDefine 
    # console code 
end 

class QtDefine < Qt::Widget 
    # GUI code 
end 

но интерпретатор отказался от моего кода, когда Qt4 не существует. есть способ иметь дело он похож на C++, как:

#ifdef QT4 
class qt4gui 
{ 
    // some code 
}; 
#else 
class qt4gui 
{ 
    // dummy 
}; 
#endif // Qt4 
+1

Исходные файлы - это только исходные файлы; вы пытались обернуть его тем, что пытается оценить что-то из рассматриваемого пакета? –

+1

Ключевое слово 'class' в Ruby - это просто выражение * (это отличается от таких языков, как Java/C#, где это объявление). Таким образом, они могут быть вложены в другие выражения/выражения: 'if defined? Qt; class QtDefine 2013-02-11 19:12:10

ответ

4

использования требуется в ваших интересах:

begin 
    require "Qt4" 
    require "my_lib/qt4" 
rescue LoadError => load_err 
    puts "Qt not found, using console" 
    require "my_lib/console" 
end 

Создайте два файла:

# my_lib/console.rb 
class ConsoleDefine 
    # console code 
end 

# my_lib/qt4.rb 
class QtDefine < Qt::Widget 
    # GUI code 
end 
+0

О да, это именно то, что мне нужно. Большое спасибо за подсказку! – xis

1

Как @pst сказал, вам не нужен препроцессор в Ruby, так как он динамический. Итак:

begin 
    require "Qt4" 
    class QtDefine < Qt::Widget 
    # GUI code 
    end 
rescue LoadError => load_err 
    puts "Qt not found, using console" 
    class ConsoleDefine 
    # console code 
    end 
end 
+1

Это была моя первая идея, но теперь у вас есть две разные системы в вашем основном файле, загроможденные каким-то едва заметным «спасением». – Reactormonk

+0

Это то, что хотел @ xis19. В препроцессоре C файл выглядит одинаково. – Necto