问题标签 [crystal-lang]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
643 浏览

concurrency - Crystal lang 光纤和网络插座

我是水晶初学者。我有疑问,也许有人可以帮助我。

我使用 Kemal 框架。有这个代码:

但是结果只发送到 web socket 一次。

(仅在第一次发布请求后)

我该如何解决?

0 投票
1 回答
532 浏览

curl - Failing to send multiple files with curl to send-anywhere.com

I was trying to build a CLI tool in Crystal to use send-anywhere.com from the command line.

Sending multipart is not builtin in Crystal but before writing my own I thought I would try to use cURL to see how exactly I should make it but I can't even get it to work with cURL!

The issue is that when sending more than one file with cURL their server only sees 1 file incoming, they do see the total length but fail at 50% since they were only expecting one file.

What kills me is that it works in the browser, I have the network inspector open and I fail to see the difference with my cURL request. I've tried setting the Expect header to 100-continue, I've compared them but I fail to see what could make it work with the browser and not curl.

Here's the command I tried with cURL all with the same result, the server ends up seeing only 1 file incoming not 2.

For testing purposes I was using a few copies of a generic LICENSE file.

I've seen in the inspector that Chrome names the file name="file[]" in Content-Disposition, so I tried it myself (same result):

I also tried these 2 commands using -H "Expect: 100-continue" with same result.

At this point I got mad and thought I'd try it myself, maybe cURL can't do it properly (highly unlikely imo, much higher chance that I'm doing something wrong).

So before writing it from scratch I tried an implementation that was used by a Telegram bot see here: https://github.com/hangyas/TelegramBot/blob/b3fcbbb621bd669bbafe9f3e91364702d06d1e10/src/TelegramBot/http_client_multipart.cr

It's pretty straightforward but I still get the same issue. Only the first file is recognized.

Note: everything works fine with both cURL and the Crystal implementation when sending only one file.

I'm going crazy, what's the difference between the browser which works and the other two? What am I not seeing?

I'm not looking for an implementation but just for someone to point out what I missed that would make multiple files recognized correctly?

0 投票
1 回答
175 浏览

crystal-lang - 如何在水晶中读取其他尺寸的切片?

我想将文件的第一个 2 字节读取为“无符号整数”。

我检查了线程“ Crystal reading x bytes from file ”,我可以使用以下代码获得第一个 2bytes。

但是,此代码返回“2 UInt8”

如何将这个“2 UInt8”读为“1 UInt16”?

0 投票
2 回答
370 浏览

crystal-lang - Crystal-lang httpget basic_auth

我正在用 Ruby 编写一些代码......但我无法弄清楚基本身份验证如何与 Crystal-lang 一起工作。

在 ruby​​ 中,我必须始终使用 request.basic_auth ,但这在 Crystal lang 中可能不起作用。
我在做什么红宝石?有人可以用 Crystal-lang 写那行 request.basic_auth 吗?

错误

0 投票
2 回答
344 浏览

crystal-lang - Crystal如何检查函数内部是否给出了块参数

假设一个函数定义如下:

如何检查块参数是否在函数内部给出?如果给出了 block 参数,则将产生 kmers。如果没有给出,kmers 将作为字符串数组返回。

0 投票
1 回答
70 浏览

crystal-lang - 水晶如果不起作用

我有以下功能

做的时候:

我得到:

第 8 行出错:在第 5 行实例化“fcn(Array(Int32))”
:Int32 的未定义方法“[]”

似乎没有考虑“如果”。如何解决此错误?

0 投票
2 回答
142 浏览

crystal-lang - 如何在“if”语句中使用联合 [Crystal]

以下代码运行良好并打印“5.0”

现在,我将代码更改为支持“nil”。

但是,此代码报告以下错误消息。

如果 $x 或 $y 为 nil,我想停止方法“#+()”的调用,如果两者都是 Float64,则打印计算结果。

这种情况的最佳做法是什么?


在上面的代码中,我简化了这个问题的代码。结果,不由自主地改变了问题的含义。我实际上想问下面的代码。

此代码报告以下错误。

我怎样才能避免这个错误?

0 投票
1 回答
243 浏览

crystal-lang - Crystal lang:理解Void的方法返回类型

它没有记录在文档中。但是通过实验,我发现将方法的返回类型键入为 Void 会取消“最后一条语句返回”(这很好),使其返回 Nil。

def foo; "baz"; end #=> "baz" : String

def foo : Void; "baz"; end#=> 无

def foo : Nil; "baz"; end#=> 无

问题是:

以上假设正确吗?

Void 和 Nil 方法返回类型有什么区别吗?

0 投票
1 回答
348 浏览

crystal-lang - 如何使用 CPU 内核进行控制 [Crystal]

我尝试在 Ruby 和 Crystal 上运行相同的程序。在程序中,没有控制线程的代码。

至于 Ruby,只使用了 1 个核心,通过程序使用率为 100%,如下图所示 在此处输入图像描述 ,时间命令的报告是

水晶方面,所有核心都被使用,CPU 使用率在 170% 左右。 在此处输入图像描述 时间报告是

这是否意味着水晶的编译器做了特定的工作来构建一个合理使用内核的二进制文件?如果是这样,有没有办法创建一个只在 Ruby 等 1 个核心上运行的二进制文件?

(健康)状况

  • CPU:英特尔酷睿 i7 6700
  • 操作系统:Ubuntu 16.04 64bit
  • Ruby 版本:2.4.0-preview2
  • 水晶版:0.18.7 / 0.19.1

------------ 2016 年 9 月 13 日添加了以下说明 --------------

代码

我通过以下步骤执行了代码。

顺便说一句,我检查了以下简单代码以查明原因。

此代码使用 1 个核心,并且 100% 正确使用。然而,许多内核都与上述 github 的水晶代码一起使用。所以,这似乎取决于代码。是否存在 GC 频繁运行导致主程序无法有效使用 CPU 的可能性?

0 投票
2 回答
548 浏览

ruby - 使用 Crystal 的 Ruby gem 原生扩展?

我只是想收集一些一般信息,因为我希望提高 ActiveModelSerializers 的性能。

我以前也从未编写过本机扩展,但看过一些 C 扩展和 Rust 扩展。

我的问题:

  • 这已经完成了吗?(在红宝石中编写水晶原生扩展?)
  • 与红宝石物体/结构的相互作用如何在水晶中起作用?(这两种语言之间是否需要任何形式的编组或任何东西进行通信?)