我首先寻找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#findEnumerable#select都存在,并记录在Enumerable上。

因此,如您从Ruby所知,以下内容确实可以工作:

segment = text.split(' ').find &.includes?("rm_")


您还可以保留带有正则表达式的中间数组:

segment = text[/rm_[^ ]+/]


并且,如果在示例代码中将include?替换为includes?,它实际上也可以工作。

关于crystal-lang - 如何获得与Crystal中的条件匹配的第一个元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31711032/

10-10 17:01