Я не разработчик Ruby. Однако я чувствую, что причина в ссылочной прозрачности.
Большинство идиоматических функций Clojure — это чистые функции, подчиняющиеся ссылочной прозрачности. В результате этого мне лично намного проще тестировать функции, которые являются независимыми автономными модулями, и они в некоторой степени обеспечивают цель модульных тестов. Clojure, будучи очень самоуверенным языком, предпочитает, чтобы большинство функций не сохраняли состояние. Это делает четкое различие между кодом, в котором возникают побочные эффекты, и состояниями, которые поддерживаются с использованием различных других альтернатив, таких как var
, refs
, agents
, atoms
и т. д., сохраняя большую часть вашего кода чистым, свободным от побочных эффектов и ссылочно прозрачным.
Я чувствую, что любой код, структурированный вокруг ссылочно-прозрачных функций без сохранения состояния, автоматически поддается использованию преимуществ REPL, будь то на Ruby или любом другом языке программирования.
Хотя для большинства практических целей интерфейс командной строки, предоставляемый другим языком, был бы столь же полезен, однако концепция Read, Eval, Print and Loop
в LISP не такая, как в любом другом языке. В любом языке non-homoiconic
не будет фазы READ
, и он будет просто читать текстовое представление или строку, однако в LISP фаза READ
на самом деле может анализировать любую форму s-expression
, которую вы ему подбрасываете. Для получения более подробной информации об этом см. Ниже 2 ответа:
Является ли Lisp единственным языком с REPL?
Чем цикл чтения-вычисления-печати в Lisp отличается от цикла Python ?
person
Abhiroop Sarkar
schedule
22.08.2016