Двойные кавычки при конкатенации строки с вектором в Clojure - PullRequest
0 голосов
/ 02 января 2012

В Clojure код (println ["foo" "bar"]) печатает следующее:

[foo bar]

Пока код (println (str "items: " ["foo" "bar"])) печатает следующее:

items: ["foo" "bar"]

Обратите внимание на двойные кавычки вокруг каждого элемента в векторе. Как я могу избежать этого? Мне нужна функция, которая объединяет строку со строковым представлением вектора, производя этот вывод:

items: [foo bar]

Как я могу сделать это в Clojure?

Ответы [ 2 ]

4 голосов
/ 02 января 2012

В вашем примере вам не нужен вызов конкатенации строк для str, потому что println может принимать несколько аргументов.В Clojure 1.3.0 хорошо работает следующее:

user=> (println "items: " ["foo" "bar"])
items:  [foo bar]
nil

Редактировать

Я перечитал вопрос и понял, что Отавио не былотолько намереваясь печатать, используя пример, чтобы проиллюстрировать свою проблему с печатью из str, но также и то, что он намеревается передать сцепленные строки в println.

Вместо этого предложит следующее:

(println
  (binding [*print-readably* nil]
    (str "items: " ["foo" "bar"])))

Вывод:

items: [foo bar]
nil

Ссылки

Документы с веб-сайта Clojure в: Другие полезные функции и макросы":

"... *print-readably* (по умолчанию true) привязано к nil, что заставляет строки печатать без окружающих кавычек или какой-либо кодировки escape-символов, а символы печатать без начального '\' или какой-либо кодировки escape-символов.«

1 голос
/ 02 января 2012

Это должно сделать это.

user=> (require 'clojure.string)        
nil
user=> (clojure.string/join " " ["foo" "bar"])
"foo bar"
user=> (str "[" (clojure.string/join " " ["foo" "bar"]) "]")
"[foo bar]"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...