【问题标题】:F# Why can't I use the :? operator in F# interactive?F# 为什么我不能使用 :? F# 交互中的运算符?
【发布时间】:2016-09-12 14:07:34
【问题描述】:

我正在尝试检查变量是否属于某种类型,如下所示:

let s = "abc"
let isString = s :? string

但在 F# 交互中,我收到以下错误:

error FS0016: The type 'string' does not have any proper subtypes and cannot be used as the source of a type test or runtime coercion.

为什么会这样?我希望 isString 是一个布尔值。

【问题讨论】:

  • 那是因为您正在尝试使用密封类型。

标签: f# typechecking f#-interactive


【解决方案1】:

因为您正在尝试使用密封类型。

试试这个:

let s = box "abc"
let isString = s :? string

对密封类型进行强制测试是没有意义的,因为它们不能有任何子类型,这就是错误消息告诉你的。

box 关键字将始终返回一个对象,无论源是引用类型(如本例)还是值类型,在这种情况下它将“装箱”它。

【讨论】:

  • 只是一个建议:您可以在此上下文中对“box”关键字进行更多说明。它可以帮助刚接触这种语言的人
  • 完成。感谢您的提示!
  • 我会在第二行加框,这样 s 仍然是一个字符串,但没关系。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-17
  • 1970-01-01
  • 2015-12-20
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 2017-08-24
相关资源
最近更新 更多