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

F#中字符串切片表达式.[3..7]实际调用的是哪个函数?

问题背景

我发现F#中可以通过切片方式定义子字符串:

let s = "the quick brown fox"
s.[4..8] // returns a string!
val it : string = "quick"

该切片表达式的特殊之处在于返回值为string类型,而非char集合。我原本以为F# Core中的string类型实现了会返回string的GetSlice方法,但查看F# Core的string.fs源码后发现并非如此。请问此处的切片操作实际调用的是哪个函数?


回答

这个切片操作是F#编译器对字符串类型做的内置语法糖处理,实际编译后会直接调用System.String.Substring方法。

F#的切片语法本身支持对没有显式实现GetSlice方法的内置类型做特殊适配,字符串就是其中之一:

  • 完整切片表达式s.[start..end]会被编译器自动转换为s.Substring(start, end - start + 1)
  • 省略起始索引的s.[..end]等价于s.Substring(0, end + 1)
  • 省略结束索引的s.[start..]等价于s.Substring(start)

所以返回值自然就是string类型,不需要F# Core的string类型额外实现对应的GetSlice方法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:24:00