IRBを読む
ruby/repl_type_completor
IRB.startから読んでいく
$0とは?
https://docs.ruby-lang.org/ja/latest/class/Kernel.html#V_0
$0 == __FILE__というイディオム
この変数に代入すると ps(1) の出力が変化します PSの結果がIRBになって嬉しい
def IRB.setupという書き方珍しい。色々読み込まれている
irb/lib/irb/init.rbはコンフィグたんまり
block.()
callを短くかけるやつ
$でshow_source
OptParseを手でやるみたいな感じだ...
rc_file_generatorsとは
yield proc難しい
for文が...
IRB::Context#load_modules (Ruby 3.3 リファレンスマニュアル)
a_matsudaさん補足
keijuさん
Rubyの名付け親
初代のIRBをガッと作った
特殊な書き方
糸柳
サンクチュアリに手を出す
初代の書き方を継承
文化遺産。味わって。
Irb classへ
IRB.context
class IRB::Context (Ruby 3.3 リファレンスマニュアル)
workspaceとは..
binding.irbのbindingみたいなやつ
bind_call
https://docs.ruby-lang.org/ja/latest/method/UnboundMethod/i/bind_call.html
repl_type_completor
補完とかやってるやつ
よく会話に出てくるrelineとは
ruby/reline: The compatible library with the API of Ruby's stdlib 'readline'
Don't use delegator to install helper methods to main object (#1031) · ruby/irb@2f1c593
is_a?はObjectに追加されてる。が、それより上のObject(Basic Object)では使えない。
code:rb
# case文を書き下すと
case str
when String
end
String === str は同じ
when ->x{}なんじゃこれ
ruby-lex.rb(ハイフン区切り。keijuスタイル)
最古のlexer。Ruby本体とは別のlexer。
Ripperを使っている(パーサー)
irb/lib/irb/ruby-lex.rb at 8c2a0d89a9865ced0b783655e9eedde0e4c07e50 · ruby/irb
Prismにしたい。
何これattr
Module#attr (Ruby 3.3 リファレンスマニュアル)
Irb#runへ
https://docs.ruby-lang.org/ja/latest/class/RubyVM=3a=3aAbstractSyntaxTree.html
keep_script_lines
each_toplevel_statement
inputを読んで、statementに変換する。evalの重要な処理
workspace.rbでevalしてる。
そもそbindingとは
class Binding (Ruby 3.3 リファレンスマニュアル)
いろんな現在の状況をオブジェクトとして管理
context_modeという謎のmode
evalメソッドまずなんなのか
Kernel.#eval (Ruby 3.3 リファレンスマニュアル)
__LINE__ - 3
本来のevalの実行してるラインの行数を正しくしたいので
IRB WASM
irb.wasm
REPLのRとEまで読めたぞい!
Reline.readmultiline?
次回はRelineか?
easter-egg.rb
ruby/lib/irb/easter-egg.rb at master · ruby/ruby
リンク
ruby/irb: interactive Ruby
IRBを読む - connpass
/ruby-jp/IRBを読む
ruby