如何从 HashSet 和派生类型(又名祖先)获取类型信息

问题描述 投票:0回答:1

如何从复合对象或派生对象的祖先中获取类型?

例如,如何从以下参数中获取

string

proc MyProc(theArg: HashSet[string, int]) =
  var innerKey: typeof(theArg)[0] # trying to get string from theArg
  var innerVal: typeof(theArg)[1] # trying to get int from theArg
  ...
  

上面的例子很愚蠢,因为我已经输入了

string
int

真实的情况更接近这样:

type
  SomeEnum = enum Up, Down, Left, Right, Sideways`
  MyKeyType = string
  MyValType = SomeEnum
  BigTable = HashSet[MyKeyType, MyValType]

proc MyProc(table: BigTable): =
  var innerKey: ...? # find the key type of BigTable
  var innerVal: ...? # find the val type of BigTable
  var someThing: ...? # find the ancestor or root+1 ancestor of MyValType, ie SomeEnum (not RootObj)
  ...
nim-lang
1个回答
0
投票

简短的答案是:你不需要,因为你的示例没有多大意义,因为它没有使用泛型。如果您不使用泛型,那么您在写入时就已经知道您需要的有关参数类型的所有信息。在使用泛型的过程的情况下,您可能不需要指定类型并使用类型推断。

一般来说,您的示例不会在基本级别上编译,

HashSet
不允许数组样式调用。我相信您缺少元组典型的括号 (
Hashset[(string, int)]
),但很难预测您真正想要的示例是什么。也许您正在尝试编写一个

© www.soinside.com 2019 - 2024. All rights reserved.