如何解决是否可以破坏Nim中的序列?
是否可以在Nim中获得前N个元素?像这样:
let [a,b,...rest] = "a/b/c".split("/")
P.S。
用例我试图解析“ NYSE:MSFT”字符串
proc parse_esymbol*(esymbol: string): tuple[string,string] =
let parts = esymbol.split(":")
assert parts.len == 2,fmt"invalid esymbol '{esymbol}'"
(parts[0],parts[1])
echo parse_esymbol("NYSE:MSFT")
解决方法
您可以像这样从元组分配变量:
let (a,b) = ("a","b")
没有内置的将元组转换为seq的方法,但是您可以使用这样的小宏来做到这一点:
macro first[T](s:openArray[T],l:static[int]):untyped =
result = newNimNode(nnkPar)
for i in 0..<l:
result.add nnkBracketExpr.newTree(s,newLit(i))
let (a,b) = "a/b/c".split('/').first(2)
,
目前至少有两个库实现了this answer中的宏,例如unpack和definesugar。
import strutils
import unpack
block:
[a,b,*rest] <- "a/b/c/d/e/f".split("/")
echo a,b
echo rest
import definesugar
block:
(a,*rest) := "a/b/c/d/e/f".split("/")
echo a,b
echo rest
# output for both
# ab
# @["c","d","e","f"]
最近的讨论:https://forum.nim-lang.org/t/7072
但是对于您的特定用例,我将使用https://nim-lang.github.io/Nim/strscans.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。