我一直在研究一种语言,但在.NET集成方面,到目前为止,我只设法让原始类型工作。昨天晚上我有了一个好主意--而不是试图在类型检查过程中找出元组、模块和函数的确切System.Type应该是什么,我可以做的是获得System.Object的System.Type,并添加一些与我自己的复杂语言类型相对应的元数据。重要的不是我要向其中添加元数据的确切System.Type,而是我的语言中的每个类型的替身都是彼此不同的。
我需要这样做的原因是,我正在使用反射名称空间中的函数进行集成,这涉及到如何处理System.Type。
type SpiralType =
| IntT
| StringT
| TupleT of SpiralType list例如,为了确保唯一性,我想要添加到System.Type中的是上面的F#区分联合类型的实例。
做这件事的最好方法是什么?
发布于 2017-10-07 00:43:07
在.NET中使用额外数据扩充类型信息的标准方法是使用属性,尽管属性构造函数参数通常仅限于可以表示为文字的值。这对你来说可能是问题,也可能不是问题,这取决于你希望你的元数据有多丰富。杜氏可能行不通。
否则,一个直接的解决方案将是将您的值与任意元数据一起包装到一个泛型类型中,即
type TypeWithMetadata<'typ, 'metadata>(value: 'typ, metadata: 'metadata) =
member this.Value = value
member this.Metadata = metadata尽管这可能会带来你想要避免的开销?
https://stackoverflow.com/questions/46602208
复制相似问题