Какой правильный REPL или командная строка? - PullRequest
1 голос
/ 07 ноября 2019

когда я пишу метод, отсутствующий в классе объекта, я получаю вывод, различный в каждом интерфейсе.

код

class Object
  def method_missing(hgh)
    puts self
  end
end

когда я использую REPL как irb, я получаю

enter image description here

когда я использую командную строку, я не получаю ошибки, любые причины будут полезны, заранее спасибо

1 Ответ

2 голосов
/ 07 ноября 2019

Ответ tl; dr в том, что оба они верны. Просто больше вещей происходит в REPL.


Когда вы запускаете код из командной строки, как:

ruby script.rb

Все, что происходит, это то, что это e

Принимая во внимание, что REPL, такие как IRB r , читают ваш ввод, e оценивают его и p набирают его в l oop.

В этом случае e оценка вашего кода буквально нарушила REPL и привела к последующей ошибке p .


Теперь вы можете быть немного смущены этим. «В обоих случаях есть отпечаток, я использую puts!». Отпечаток, на который я ссылаюсь здесь, является результатом, который визуализируется после каждой e оценки. В этом случае результат определения метода (=> :method_missing).


Это может быть не только сама печать p . Это может быть тонна другого кода под капотом, который должен выполнить REPL, чтобы сохранить состояние вроде «какой код был определен для какой строки» и т. Д.

Подумайте, что вытолько что сделал - вы сделали так, чтобы каждый объект имел каждый метод, который можно вернуть nil. Это не только для кода, который вы пишете в REPL. Это для кода из самого REPL.

...