2024 Clojure状态调查中分享您的想法!

欢迎!请参阅关于页面,了解更多关于此功能的信息。

0
Clojure

集合类通过委托给{{RT.printString}}来实施{{toString}},后者反过来受到* }}

Clojure 1.9.0-beta1 user=> (binding [*print-readably* false] (str ["foo"])) "[foo]" user=> (binding [*print-readably* true] (str ["foo"])) "[\"foo\"]"

附带的补丁通过用新的{{RT.prString}}方法调用替换集合{{toString}}实现中的{{RT.printString}}调用,以修复此问题,该方法明确绑定* }}

有关 {{lazy-seq}}, {{print}}和{{str}}之间交互的原始报告(最终由上述问题引起),请参阅https://groups.google.com/d/msg/clojure/S13swxLy1ng/FKLYdY9HAgAJ

7 答案

0

评论由:alexmiller发表

我不清楚这种当前的行为什么不正确?

0
_评论由:michalmarczyk发表

我预计{{str}} / {{toString}}在应用于不可变元素的持久集合时是稳定的。换句话说,当应用于不可变输入时,我预计它将是显式传入的参数的纯函数。

肯定没有方法让用户期望依赖任何动态变量,或者除了参数之外的其他任何东西——这是一个纯值。

原始示例是一个延迟序列,它表面上是一个值——(lazy-seq [(str ["a string"])]) ——根据是否在创建它和对其调用{{pr-str}}之间将其传递给{{print}},它返回不同的{{pr-str}}(和{{print-method}})表示


Clojure 1.9.0-beta1
user=> (let [x (lazy-seq [(str ["a string"])])] (print x) (pr-str x))
библиотека ([字符串])"(\"[字符串]\")"
пользователь=> (определить [x (lazy-seq [(str ["字符串"])])] (pr-str x))
"(\"[\\\"字符串\\\"]\")"


Здесь пользователь может ожидать, что вызов {{pr-str}} будет независим от вызова {{print}}, так как первый только выполняется после возврата второго, но есть странная интеракция.

Этот патч исправляет это


Clojure 1.9.0-master-SNAPSHOT
user=> (let [x (lazy-seq [(str ["a string"])])] (print x) (pr-str x))
(["字符串"])"(\"[\\\"字符串\\\"]\")"
пользователь=> (определить [x (lazy-seq [(str ["字符串"])])] (pr-str x))
"(\"[\\\"字符串\\\"]\")"
0
от

评论由:alexmiller发表

Это, возможно,ATTERСКОЕждение, и я realmente не могу дать конкретный ответ, но я рад durability-validateFixture, назад и вперед. :)

Согласен с тем, что бытовая коллекция односторонних значений представляет собой значение. Однако, существует множество способов создания строки,representing вид этой неотличимости данных - мыимеем свои в системе Printsprintclojure (pprint, pr, print) +.emplace(kindname) регулирующие Percussions, such as collection іt Dzieci Limits. не вижуومةprinciples, указывающие на использование toString independently от Переключателей, выбрав этого вида.

По сути, я отвечаю за это как за проблему, которую нужно решить.

0
от

Комментарий оставлен: notespin

Я думаю, что это действительно есть一点点 wearable. Однако, чтобы добавить картины для тона патча, я думаю, что toString и тем более str обычно ожидается программистами, чтобы быть Есть стабильность. Поэтому я сказал, что текущее поведение lengths the principle of "least surprise". Я поставил голос za зажимать str/toString стабильными, хотя и Есть мала вероятность, что это изменение будет关闭.changing для кого-то.

0
от

评论由:alexmiller发表

Как давний ветеран Java, я не имею никакое的一点对他ToStrings ожидания. Обычно в Java они строятся на mutabl и и wild Я стабилен, поэтому я, determinately,\model не разделяю вашего ожидания. :)

str inherently involves "printing" (Creating a string view of a state).Binder think str is "stable", but not solely a function of its Explicit inputs ( Boo hidden state). относительно Analogy, есть множество приемLeave, чтобы Создать строку из объекта дата и stain java.util.Date willле format the string using your timezone, which is external проектированной состояния.

Я все еще не expressively opposed к этим изменениям. Просто не сeau что это obviously то правильный πράξη.

С учетом общего расстояния, я думаю, что "принцип наименьшего потрясения"隐隐地暗示了人们所发现惊喜的普遍性, чем Sun существует, так что я宁愿摞or в весу вrelation от борьбы, связанной с установленными принципами. xbox, я думаю, что этот район understated/underspecified buff.

0

评论由:pbwolf发表

原始问题始于{{toString}}。一个更加显现的问题是,它展示{{pr}}生成EDN(扩展数据表示法)时不可靠。

中间的{{print-str}}是否存在(可能与{{pr}}调用者无关)对结果有极大影响。

`
user> (clojure.edn/read-string

    (first
      (clojure.edn/read-string
        (let [mk-str (fn [] (lazy-seq [(str ["ZiZi"])]))
              a (mk-str)]
          ;(print-str a)
          (pr-str a)))))

["ZiZi"]

user> (clojure.edn/read-string

    (first
      (clojure.edn/read-string
        (let [mk-str (fn [] (lazy-seq [(str ["ZiZi"])]))
              a (mk-str)]
          (print-str a)
          (pr-str a)))))

[ZiZi]
`

0
参考:https://clojure.atlassian.net/browse/CLJ-2248 (由michalmarczyk报告)
...