Описание тега crystal-lang
Crystal - это язык программирования с синтаксисом, вдохновленным Ruby, но со статической проверкой типов и компиляцией в собственный и эффективный код.
1
ответ
Как я могу передавать несколько файлов одновременно, используя HTTP::Server?
Я работаю над HTTP-сервисом, который обслуживает большие файлы. Я заметил, что параллельные загрузки невозможны. Процесс обслуживает только один файл за раз, и все остальные загрузки ожидают до завершения предыдущих загрузок. Как я могу передавать н…
28 июн '17 в 12:43
1
ответ
Определить валидации объекта Class
Есть ли собственный способ определения проверок для объекта Crystal? Давайте рассмотрим этот класс: class Person def initialize(@age : Int32) end end Как я могу добавить простую проверку if age < 18? Пример: Person.new(10) >> Error: attibut…
22 дек '16 в 20:21
1
ответ
Создать модель Granite из параметров JSON
То, что я хотел бы, чтобы произошло: кто-то может сделать запрос на почту users/new с параметрами, и я хотел бы создать User объект из параметров JSON. В файле readme он дает такой пример: foo = Foo.from_json(%({"name": "Granite1"})) Но когда я пыта…
11 сен '18 в 12:40
1
ответ
Как проверить, содержится ли строка в подстроке в Crystal Lang?
Я не вижу String#contains метод или String#search метод в Crystal API.
19 мар '18 в 04:52
1
ответ
Кристалл: хороший способ выбора методов
Мне нужно передать некоторые опции в метод, некоторые из этих опций являются необязательными (что-то вроде деструктурирования объекта в JS). Мой текущий код: def initialize( arg1 : String, options = {} of Symbol => String ) opt = MyClass.get_opti…
15 янв '17 в 12:35
1
ответ
Как я могу остановить волокно?
Допустим, у нас есть волокно с длительным циклом и с данным каналом таймаута, когда мы получаем сообщение, мы хотим остановить волокно и перезапустить его (или сделать что-то еще). Вот псевдокод: # we have a timeout channel fiber = spawn do # long r…
17 дек '18 в 21:05
1
ответ
Хрустальный язык карри
Я пытаюсь создать процедуру добавления карри в Crystal. Как заставить этот пример работать? semi_curry = ->(f: Proc(Int32, Int32)) { ->(a: Int32) { ->(b: Int32) { f.call(a, b) } } } add = ->(a: Int32, b: Int32) {a + b} p semi_curry(add).…
18 мар '18 в 19:23
2
ответа
Почему Crystal не может определить этот тип в инициализаторе?
У меня есть следующий код: class Triangle def initialize(@sides : Array(Int32)) @set = Set.new(@sides) end end Однако я получаю ошибку компилятора, которая дает мне: Can't use Set(T) as the type of instance variable @set of Triangle, use a more spec…
28 янв '18 в 14:39
1
ответ
Реализация Ленивого Перечислителя в Кристалле
В Ruby для создания собственного ленивого перечислителя можно использовать Enumerator как это: enum = Enumerator.new do |e| e << value = ".a" loop { e << value = value.next } end enum.next # => ".a" enum.next # => ".b" enum.next # …
10 янв '19 в 16:07
1
ответ
Кристаллический эквивалент алгебраическим типам данных
Какой идиоматический способ написать эквивалент алгебраического типа данных в Crystal? Например, в Хаскеле я мог бы data Stage = StageInitial String | StageFinished String Итак, я хочу иметь два этапа, каждый из которых имеет строку полезной нагрузк…
27 фев '18 в 00:12
1
ответ
Получение синтаксической ошибки: ожидание токена "EOF", а не "end" и не может понять, почему
Итак, я пытаюсь реализовать способ добавления миграций базы данных без ORM/ODM для моей базы данных SQLite3, и ошибка, которую я получаю (syntax error: expecting token 'EOF', not 'end') для этого кода: src/project/database/migration/migrations/1.cr:…
19 июн '17 в 03:08
1
ответ
Проблема со связью со статической библиотекой C в программе Crystal
Я хотел поэкспериментировать с возможностями взаимодействия C в Crystal, поэтому я написал небольшую POC-библиотеку на C. Я могу связать библиотеку с C-программой и использовать ее. Тем не менее, когда я пытаюсь связаться с ним из моей программы Cry…
23 фев '17 в 22:13
0
ответов
Как получить метод оператора индекса ([]) как Proc
Я хочу получить метод оператора индекса ([]) из Array как Proc, но я продолжаю получать ту же ошибку: expecting token 'IDENT', not [], Вот как я пытаюсь получить доступ к оператору индекса (как обычный метод): ->array.[](Int32) Я просто хочу полу…
17 янв '19 в 03:49
1
ответ
Как указать IP-адрес для исходящего соединения?
Мой сервер имеет два IP-адреса. Например, если у меня есть два приложения Crystal, как я могу заставить каждое из них работать с указанным IP-адресом?
23 окт '17 в 04:46
2
ответа
Crystal-lang httpget basic_auth
Я пишу некоторый код на Ruby... Но я не могу понять, как базовая аутентификация работает с Crystal-lang. В ruby мне всегда приходилось использовать request.basic_auth, но это, вероятно, не работает в Crystal lang. Что я делаю рубин? Может ли кто-н…
19 авг '16 в 22:45
1
ответ
Crystal lang: Тип арифметики, принадлежит Союзу?
Я пытаюсь реализовать функцию: def foo(t : Class) if t in Int::Signed # ... end end Но как реализовать t in Int::Signed? Где Int:: Подписано я знаю is_a?(Int::Signed) но здесь параметр имеет тип Type, Благодарю.
29 июн '18 в 06:40
1
ответ
Crystal .cycle Recycle после завершения цикла
Так в моем случае def dynamic_data() data = [] of String # some data from db # data << db["somekey"].to_s return data end dynamic_data().cycle do |d| # some stuff puts d end Мои данные достигают более 500 строк и будут продолжать расти и увели…
29 авг '17 в 06:43
3
ответа
Как получить следующие n бит с помощью Crystal
Я пытаюсь прочитать информацию ID3v2 из mp3 файла. Часть этого - чтение флагов. f.gets n получает меня n байты, но мне нужно n биты.
03 май '17 в 05:06
1
ответ
Потоки HTTP-запросов в Crystal
У меня есть код, который должен работать "параллельно" (не реально, я знаю, что Crystal не поддерживает параллелизм). require "http/client" thread_count = 4 resps = [] of HTTP::Client::Response mutex = Thread::Mutex.new urls = [] of String (1..10).e…
05 мар '18 в 14:14
2
ответа
Как превратить массив кодовых точек (Int32) в строку?
В Crystal строка может быть превращена в массив (Int32) кодовых точек: "abc".codepoints # [97,98,99] Есть ли способ превратить массив обратно в строку?
19 сен '17 в 00:03