Open6

Ruby で scheme 処理系の実装をしてみる

あわもあわも

thor で呼び出すクラスの中でKernel.#getsするとエラー出る...?

`gets': No such file or directory @ rb_sysopen
あわもあわも

thor の ドキュメント(or コード)を読んでみる

公式HP

公式HPはそんなに情報が多くない。
http://whatisthor.com/

でもサブコマンドやクラスオプションはちょっと面白そう、ちょっとしたCLIコマンドなら楽しく作れるみたい。

Github の wiki

https://github.com/rails/thor/wiki
どちらかというとこちらの方が情報量が多い。

Actions - Thor::Actions are helpers for your Thor tasks that make typical actions, like file system interaction or command line user dialogue, easier.

今回知りたい情報は actions 周りにありそうなのでそこを確認していく。

あわもあわも

エラー原因はこれのような気もする

  • ARGVとgetsの併用
    thor によるエラーではなくて、ARGVとgetsを合わせて使っているためエラーとなった

thor のソースを見たところ、デフォルト値としてARGVを用いている
自身で書いたコードではARGVを使用していないため、原因はここ

https://github.com/rails/thor/blob/a43d92fad7ebd77d359b7b96eb3db8a73ef9057c/lib/thor/base.rb#L582-L594

下記のエラーはこれを考慮せずに Thor#start メソッドを呼び出したため発生

`gets': No such file or directory @ rb_sysopen