【发布时间】:2010-05-08 16:40:30
【问题描述】:
在 F# 中,我有一个返回 System.Linq.Expression 实例的函数:
and System.Object with
member this.ToExpression() =
match this with
| :? System.Int32 -> Expression.Constant(this) :> Expression
| :? System.Boolean -> Expression.Constant(this) :> Expression
| :? Tml.Runtime.Seq as s -> s.ToExpression()
| _ -> failwith "bad expression"
如果我省略返回值的类型强制,F# 将把函数的返回类型推断为 ConstantExpression。我的第一个想法是将返回类型显式标记为:#Expression,但这不起作用。有没有一种更优雅的方式来做到这一点,而不涉及手动将返回类型转换为最通用的类型?
谢谢。
编辑:感谢大家的回答。我将使用显式返回类型 + upcast 场景。
【问题讨论】:
标签: f# types coercion type-systems