gpt4 book ai didi

c# - 如何支持名义类型语言的结构类型?

转载 作者:太空狗 更新时间:2023-10-30 00:23:09 24 4
gpt4 key购买 nike

F#, Nominative or Structural? ,答案说我可以通过一些奇特的机制欺骗 F# 像结构类型语言一样工作。我该怎么做?

最佳答案

前一个答案所指的“奇异机制”大概是statically resolved type parameters .这使您可以编写接受具有某些特定成员的任何类型的对象的函数。例如,您可以编写 sayHello 函数,该函数适用于任何具有 string 类型的 Name 成员的对象:

let inline sayHello (any : ^T) = 
let name = (^T : (member Name : string) any)
printfn "Hello %s" name

现在这将适用于名义上不相关的两种类型:

type Person(name:string) = 
member x.Name = name

type Animal(name:string) =
member x.Name = name

sayHello (Person("Tomas"))
sayHello (Animal("Bunny"))

也就是说,F# 主要是一种名义类型的语言,因此过度依赖静态成员约束是不合常理的。它会使您的代码看起来很糟糕,并且您可能会遇到该机制的限制。对于一些有限的用例来说,这是一个不错的功能,但它不是 F# 中的主要抽象机制。

关于c# - 如何支持名义类型语言的结构类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43415970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com