Я пишу свою первую clojure программу и хочу считать строки из stdin.
Когда я пробую это:
(doall (map #(println %) (line-seq *in*)))
Я получаю это исключение:
Exception in thread "main" java.lang.ClassCastException: clojure.lang.LineNumberingPushbackReader cannot be cast to java.io.BufferedReader (test.clj:0)
Я получаю те же результаты в версии 1.0 и 1.1
Таким образом, как я преобразовываю *in*
в seq я могу выполнить итерации? Я думал бы, что это достаточно распространено это *in*
самостоятельно было бы повторяемо, но это не работает ни один - если я пытаюсь использовать его непосредственно, я добираюсь:
java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.lang.LineNumberingPushbackReader (NO_SOURCE_FILE:0)
Кроме того, есть ли какие-либо примеры выполнения общей обработки файла в clojure?
Значение переменной alphaChar
присваивается на основе некоторого условия. Представьте себе сценарий, в котором переменная x
содержит значение, отличное от 0 к 9. Предположим, что он содержит 10. Тогда ни одно из условий случая не будет удовлетворено x
, поэтому alphaChar
не будет присвоено никакого значения, в результате оно будет полностью неинициализировано. Поэтому при преобразовании alphaChar
в строку оно преобразует некоторое значение мусора в строку и возвращает его вызывающему методу. Это причина, по которой вы получаете это сообщение.
Если вы хотите получить простое решение, то добавьте следующий код ниже
case 9: alphaChar = 'J';
break;
-
default: return null;
и проверьте вызывающие методы, возвращает ли эта функция alphaCoords
null или нет, как это -
if(alphaCooord(10) == null)
{
// x contains value other than 0 to 9
}
else
{
// x contains value between 0 to 9, so the returned value will be the string
// representation of the corresponding character
}
Таким образом, ваш код не будет слишком сложным, или вам не нужно будет выбрасывать или обрабатывать любые исключения или что-то подобное.
Надежда, что поможет:).
-121--3432995-Вы считаете, что вы перезаписываете свои функции фальшивыми? В этом случае перед определением функции можно проверить, определена ли она уже.
if (тип yureFuncterName = = 'функция')
-121--4998575- Попробуйте обернуть * в *
в java.io.BufferedReader
. А также используйте doseq
вместо doall
, как указал devstopfix:
(doseq [ln (line-seq (java.io.BufferedReader. *in*))]
(println ln))
Обратите внимание, что line-seq
задокументирован для требования BufferedReader
в качестве источника.