You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nim语言中使用in运算符判断字符串子串存在的问题及解决

在Nim中实现Python风格的子串存在判断

嘿,这个问题我之前也踩过坑!你想用"needle" in "haystack"这种简洁的写法判断子串是否存在,但Nim默认情况下并不支持直接这么用——这就是你看到那个类型不匹配错误的原因。

错误原因拆解

Nim默认提供的contains proc(也就是in运算符背后的底层实现)只支持切片、集合、开放数组这些类型,并没有默认覆盖字符串子串的判断场景,所以编译器才会抛出:

Error: type mismatch: got (string, string) but expected one of:
proc contains[T](s: Slice[T]; value: T): bool
proc contains[T](x: set[T]; y: T): bool
proc contains[T](a: openArray[T]; item: T): bool

简单解决方案

只要导入标准库中的strutils模块,就能解锁字符串版本的contains实现,让你像Python一样用in运算符:

import strutils

# 现在这个写法完全可以正常运行了
if "needle" in "haystack":
  echo "找到子串啦!"

额外小技巧

如果你不想导入整个strutils模块,也可以单独导入contains proc来减少依赖:

from strutils import contains

if "needle" in "haystack":
  # 你的业务逻辑代码

当然,你最初用find方法的写法是完全正确的,只是in运算符的写法更直观简洁而已。

内容的提问来源于stack exchange,提问作者v.oddou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:41:34