irb で変数にプログラムを入れるためのライブラリ edit.rb を作ってみたが、複数のターミナルでは一時ファイルが共有されてしまって使えなかった。Ruby の標準ライブラリ tempfile.rb を使うとその問題が解決できそうだったのでやってみた。
使用法 C:\Users\********\Ruby>irb irb(main):001:0> require 'edit'; include Edit => Object irb(main):002:0> a = edit => "print \"hello, world\\n\"\n" irb(main):003:0> puts a print "hello, world\n" => nil irb(main):004:0> eval a hello, world => nil irb(main):005:0> save('a.txt', a) => 23 irb(main):006:0> b = File.read('a.txt') => "print \"hello, world\\n\"\n" irb(main):007:0> eval b hello, world => nil irb(main):008:0> a = edit(a) => "print \"hello, world\\n\"\nprint \"how are you?\\n\"\n" irb(main):009:0> eval a hello, world how are you? => nil Linux 用 edit.rb ファイル名: edit.rb (open は半角英数に変換して使用) require 'tempfile' module Edit def edit(prog = nil) temp = Tempfile.new('temp') if prog != nil temp.print(prog) end temp.close system "vi #{temp.path}" temp.open prog = temp.read temp.close! prog end def save(path, var) File.open(path, 'w') {|f| f.write(var)} end module_function :edit, :save end Windows用 eidt.rb ファイル名: edit.rb (open は半角英数に変換して使用) require 'tempfile' class Tempfile def make_tmpname(basename, n) sprintf('%s.%d.%d.txt', basename, $$, n) end end module Edit def edit(prog = nil) temp = Tempfile.new('temp') if prog != nil temp.print(prog) end temp.close system "notepad #{temp.path}" temp.open prog = temp.read temp.close! prog end def save(path, var) File.open(path, 'w') {|f| f.write(var)} end module_function :edit, :save end 自分で作ったライブラリを require で使いたいときは、irb を起動して、$: に登録されているパスをしらべてそこへそのファイルを入れておけばできる。パーミッションの関係でファイルがコピーできない時は、ububntu なら sudo を利用すると良い。(覚書)
by tnomura9
| 2008-10-24 04:47
| Ruby
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||