我有一个关于类型定义的问题。
我想限制一种现有的类型来强制执行某些附加的标准。例如,我想为DNA字符串构造一个类型。
DNA链可以看作是任意长串的字符,只包含'A','C','G','T‘(核苷酸)。类似地,我将RNA字符串定义为只有字母'A‘、'C’、'G‘、'U’的字符串。
RNA字符串可以分解为密码子,即在四个核苷酸中只有三个字符的字符串('A','C','G','U')。我能做一个密码子类型,自动检查(例如在初始化或类型转换后),字符串是否长度为3,是否包含除有效字符以外的任何其他字符?
我尝试使用一种概念类型:
var
NucleotideSet: set[char] = {'A','C','G','U'}
type
Nucleotide {.explain.} = concept var a
a is char
a in {'A','C','G','U'}
RnaCodon = seq[Nucleotide]但是这个实验特性并不强制现有类型,它只检查一个类型是否验证了某些属性,但我可能弄错了。
我想要做的是操纵RNA字符串,而不必手动检查每个字符是否确实是一个核苷酸。
对于上述代码中的定义,下列操作失败:
echo 'A' is Nucleotide我得到一个类型错配:‘a’是焦炭,但预期的核苷酸。在这个例子中,我做错了什么,如何修复它来定义RNAstring和密码子?我现在的猜测是,在概念类型中,a不是类型,而是变量,我可能需要这样写:
type
Nucleotide {.explain.} = concept var a, type T
a is T
T is char
a in {'A','C','G','U'}但我也得到了一个类型错配错误。
发布于 2022-02-24 10:49:34
据您解释,您唯一的问题是,您希望有一种变量,如果您确定只有某个值是持有的。我会使用普通字符串作为独特的类型。文档中的避免sql注入攻击部分解释了这个词是如何使用的:
当您使用不同的类型时,您甚至不需要检查某个不同类型的元素是否是核苷酸,因为您的输入验证/转换proc已经处理过一次了。
https://stackoverflow.com/questions/71242378
复制相似问题