gpt4 book ai didi

f# - 内联函数有什么好方法可以访问私有(private)或内部值吗?

转载 作者:行者123 更新时间:2023-12-02 02:28:27 26 4
gpt4 key购买 nike

我刚刚遇到了一个问题:当我尝试从内联函数访问私有(private)或内部值时,我收到错误“值'xxx'被标记为内联,但它的实现使用了一个不够充分的内部或私有(private)函数无障碍”。虽然合乎逻辑,但我想知道是否有人有很好的解决方法。我能想到的最好的事情就是将这些值公开放在一个嵌套模块中,并希望没有人四处闲逛(无论如何我都不太担心,因为这些值是不可变的)。我想反射是一种选择,但是如果不能缓存调用(使用...私有(private)委托(delegate)),性能损失太大了。

最佳答案

简短的回答:不,由于该值将内联插入到调用站点中,因此它不能使用私有(private)值,并且没有真正的解决方法。

更长的答案:如果您不介意编写极其丑陋的代码并且可以处理每次使用的几个方法调用的开销,那么一种替代方法是创建一个动态实现(例如,核心库中的 OperatorIntrinsics.AbsDynamicTableImpl),它可以是私有(private)的。然后,您可以将动态实现包装在公共(public)不透明的泛型方法中(例如 OperatorIntrinsics.AbsDynamic<'T> ),然后创建一个内联值,该值添加适当的类型约束并遵循动态实现(例如 let inline abs< ^t when ^t : (static member Abs : ^t -> ^t)> x = AbsDynamic x )。现在当你内联 abs你只看到一个调用 AbsDynamic但没有进一步的实现细节。在大多数情况下,我希望这是一个比仅仅将您的值(value)公开而不是私有(private)的更糟糕的解决方案。

关于f# - 内联函数有什么好方法可以访问私有(private)或内部值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4824536/

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