我首先寻找find
,因为许多API与Ruby相同,但找不到find
。因此,我认为下一个最佳选择是select
+ first
(我的数组很小,所以可以)。
以与Ruby中相同的方式,在Crystal API select!
中查找数组会占用一个块。看来select!
突变了接收数组,没有select
(至少我可以看到!)。
这是我的代码:
segment = text.split(' ').select! { |segment| segment.include?("rm_") }.first
错误是:
segment = text.split(' ').select! { |segment| segment.include?("rm_") }.first
^~~~~~~
最佳答案
Enumerable#find
和Enumerable#select
都存在,并记录在Enumerable上。
因此,如您从Ruby所知,以下内容确实可以工作:
segment = text.split(' ').find &.includes?("rm_")
您还可以保留带有正则表达式的中间数组:
segment = text[/rm_[^ ]+/]
并且,如果在示例代码中将
include?
替换为includes?
,它实际上也可以工作。关于crystal-lang - 如何获得与Crystal中的条件匹配的第一个元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31711032/