nim-lang - 是否可以在 Nim 中破坏序列?
问题描述
是否有可能在 Nim 中获得前 N 个元素?就像是:
let [a, b, ...rest] = "a/b/c".split("/")
附言
用例我正在尝试解析“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 到 tuple 的转换,但是你可以用一个像这样的小宏来做到这一点:
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)
推荐阅读
- c# - 如何从 EventActivity 处理程序或除 OnMessageActivityAsync 之外的任何处理程序调用新对话框?
- assembly - Armv8 程序集 cmp 在运行时冻结
- javascript - 集合与有序集合
- discord.py - 如何修复 discord.py 不发送嵌入?
- python - Python multiprocessing.Process:如何将导入的目标函数的标准输出重定向到文件?
- azure-devops - 如何使用 Azure DevOps 部署组部署到本地服务器 (Linux)
- r - 如何使用 Lat Long 数据查找重复项并使其成为大数据集中的唯一标识符
- java - 使用 ObjectBox 查询 LocalTime 范围
- reactjs - 在 React 中,如何在所有组件中拥有一个自定义钩子的单个实例?
- forms - 在 Flutter 中的 TextFormField 中,用户输入一个 url 或网站链接以将其保存到 firebase 数据库,并且应该使用浏览器打开该链接