わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

irbが便利になっていた

 仕事のプログラムを,Rubyで書いていたときのことです.
 Symbolオブジェクトの配列って,ソートできたっけ…
 と思い,端末でpryを実行したものの,なぜかエラーメッセージが出て,pryのなじみのプロンプトになってくれませんでした.
 gem updateをしても,変わりません.使用するRubyは,rbenvでインストールしたのですが,rbenv install 2.7.0-devで最新版のビルドをさせるとなると,数分はかかるし,それで解決する保証はないし…
 pryにかえて,irbを使うことにしました.irbコマンド実行直後のプロンプトは,こうです.

irb(main):001:0>

 [:xyz,:abc].sortを実行すれば,ソートできるか確認できるなあと思いながら,最初の「[」を押した時点で,プロンプトが一部変化しました.

irb(main):001:1* [

 「>」から,「*」に変わっています.コマンド,ではなく,Rubyの式を入力中というのを,表しているのでしょうか.もう少し,打っていきます.

irb(main):001:1* [:
irb(main):001:1* [:xyz
irb(main):001:1* [:xyz,
irb(main):001:1* [:xyz,:abc
irb(main):001:0> [:xyz,:abc]

 ここで,「*」から「>」に戻りました.Rubyの構文上,正しい式のときには「>」,そうでないときには「*」と表示される,と思われます.
 ソートさせましょう.

irb(main):001:0* [:xyz,:abc].
irb(main):001:0> [:xyz,:abc].s

 ここでTabキーを2回打つと,候補が出ました.

irb(main):001:0> [:xyz,:abc].s
[:xyz,:abc].shift
[:xyz,:abc].sort!
[:xyz,:abc].sort_by!
[:xyz,:abc].select!
[:xyz,:abc].shuffle!
[:xyz,:abc].shuffle
[:xyz,:abc].sample
[:xyz,:abc].sort
[:xyz,:abc].select
[:xyz,:abc].sum
[:xyz,:abc].size
[:xyz,:abc].slice
[:xyz,:abc].slice!
[:xyz,:abc].slice_before
[:xyz,:abc].slice_after
[:xyz,:abc].slice_when
[:xyz,:abc].sort_by
[:xyz,:abc].singleton_methods
[:xyz,:abc].singleton_class
[:xyz,:abc].singleton_method
[:xyz,:abc].send
irb(main):001:0> [:xyz,:abc].s

 補完候補はソートされていませんが,ともあれ「sort」が見つかりましたので,o,Tab,Enterの順に押しました.

irb(main):001:0> [:xyz,:abc].sort
=> [:abc, :xyz]

 Symbolオブジェクト間でソートが可能なのを,無事に確認できました.
 ちなみに「irb(main):001:0* [:xyz,:abc].」の状態でも,Tabキー2回で候補が出現しました.それと「irb(main):001:0> [:xyz,:abc].s」のときにEnterキーを押すと,「NoMethodError (undefined method `s' for [:xyz, :abc]:Array)」というエラーになりました.これは実行時エラーであり,「[:xyz,:abc].s」はRubyの構文として適切(Array#sを定義していればエラーなく処理してくれる)なのは言うまでもありません.