我不记得怎么让SRTP工作了
我想要一个函数,它接受param并调用指定的方法,容易吗?
let inline YearDuck< ^a when ^a : (member Year : Unit -> string)> (x : ^a) : string =
x.Year ()但我明白
Severity Code Description Project File Line Suppression State
Error FS0072 Lookup on object of indeterminate type based on information prior to this program point. A type annotation may be needed prior to this program point to constrain the type of the object. This may allow the lookup to be resolved. 它知道x是一个^a,我已经指定了^a有方法年,那么问题是什么?
(其实我想要一年成为一处房产,但我想在跑步之前先走一走)
发布于 2022-06-20 18:26:13
试着这样做吧:
let inline YearDuck x =
(^a : (member Year : unit -> string) x)测试代码:
open System
type YearTest (dt : DateTime) =
member _.Year() = string dt.Year
YearTest(DateTime.Now)
|> YearDuck
|> printfn "%A" // "2022"我希望我能说出为什么它是这样工作的,而不是你尝试的方式,但我真的不知道,而且我不认为它在任何地方都有明确的记录。SRTP只是当前形式的黑暗魔法。
如果您想要一个属性,请尝试如下:
let inline YearDuck x =
(^a : (member get_Year : unit -> string) x)
type YearTest (dt : DateTime) =
member _.Year = string dt.Year
YearTest(DateTime.Now)
|> YearDuck
|> printfn "%A" // "2022"https://stackoverflow.com/questions/72691031
复制相似问题