You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何标注inline的成员代码会抛出FS1113错误(使用内部/私有成员)?

F# 内联成员编译差异问题解析

问题现象

以下代码编译时会抛出错误:

type SomeType(x) =
    member inline _.Value = x

对应的错误提示:

member inline _.Value = x

--------------------^^^^^
/home/user/stdin(2,21): error FS1113: The value 'Value' was marked inline but its implementation makes use of an internal or private function which is not sufficiently accessible

但将成员的self参数从_改为命名参数x后,代码却能正常编译:

type SomeType(x) =
    member inline x.Value = x

请问导致这种编译结果差异的原因是什么?

原因解析

这是F#编译器处理内联成员时的细节逻辑差异:

  • 使用_作为self参数时,编译器会把右侧的x解析为类的私有字段(也就是构造函数传入的那个x)。而内联成员要求所有被引用的实体都必须具备可内联的访问权限,私有字段不符合这个要求,因此触发FS1113错误。
  • 使用命名的self参数(这里是x)时,右侧的x会被编译器解析为当前实例的self参数,而非构造函数传入的私有字段。此时内联成员的实现仅依赖公开可见的self参数,不存在访问权限的问题,因此可以顺利编译。

本质上两种写法里的x指向的对象完全不同:前者指向私有内部字段,后者指向实例本身,这直接导致了编译器对内联合法性的判断结果不同。

内容的提问来源于stack exchange,提问作者capitalistcuttle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 03:12:35