首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方法和性质的简单SRTP

方法和性质的简单SRTP
EN

Stack Overflow用户
提问于 2022-06-20 17:43:50
回答 1查看 64关注 0票数 2

我不记得怎么让SRTP工作了

我想要一个函数,它接受param并调用指定的方法,容易吗?

代码语言:javascript
复制
let inline YearDuck< ^a when ^a : (member Year : Unit -> string)>  (x : ^a) : string = 
    x.Year ()

但我明白

代码语言:javascript
复制
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有方法年,那么问题是什么?

(其实我想要一年成为一处房产,但我想在跑步之前先走一走)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-20 18:26:13

试着这样做吧:

代码语言:javascript
复制
let inline YearDuck x =
    (^a : (member Year : unit -> string) x)

测试代码:

代码语言:javascript
复制
open System

type YearTest (dt : DateTime) =
    member _.Year() = string dt.Year

YearTest(DateTime.Now)
    |> YearDuck
    |> printfn "%A"   // "2022"

我希望我能说出为什么它是这样工作的,而不是你尝试的方式,但我真的不知道,而且我不认为它在任何地方都有明确的记录。SRTP只是当前形式的黑暗魔法。

如果您想要一个属性,请尝试如下:

代码语言:javascript
复制
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"
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72691031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档