From: Masao M. <mu...@hi...> - 2006-07-12 16:04:16
|
むとうです。 On Wed, 12 Jul 2006 10:03:50 +0900 "Kouhei Sutou" <ko...@co...> wrote: > 須藤です. > > 0.15.0からGtk.initがrequire "gtk2"するだけで実行される > ようになりましたが,これによって困る場合があります. > # リリースされてからでごめんなさい. > > どういう場合に困るかというと,自分で引数を処理しているア > プリケーションで困ります. > > 今まではこんな風にOptionParserとかで引数を処理してから > Gtk.initを呼んでいたやつがあるとします. > > require "gtk2" > opts = OptionParser.new do |opts| > opts.on("-x", "test") {} > ... > end > opts.parse!(ARGV) > ... > Gtk.init > > 今までだと,opts.parse!(ARGV)で処理されたARGVをGtk.init > が使うようになります.0.15.0からは,opts.parse!(ARGV)す > る前にGtk.initがARGVを使ってしまって,アプリケーションが > 引数を処理する前に,GTK+が引数を処理してしまいます. > > なので,↑の例で,今までは > > % ruby test.rb -x > > とかができたのに,0.15.0からは > > % ruby test.rb -x > ../gtk2.rb:13:in `init': -x は不明なオプションです (RuntimeError) > > といわれるようになってしまいます. なるほど。こんな伏兵が・・・。 申し訳ないのですが、このケースはアプリ側で対応してくださいませ。 案1) require 'gtk2'の代わりに require 'gtk2/base'とする。 begin require 'gtk2/base' rescue LoadError require 'gtk2' end require 'optparse' opts = OptionParser.new do |opts| opts.on("-x", "test") {} end opts.parse!(ARGV) Gtk.init 案2) optparseした後にrequire 'gtk2'を呼び出す。 require 'optparse' opts = OptionParser.new do |opts| opts.on("-x", "test") {} end opts.parse!(ARGV) require "gtk2" Gtk.init 他に良いアイデアがあればコメントください。 -- .:% Masao Mutoh<mu...@hi...> |