【发布时间】:2015-06-30 19:17:51
【问题描述】:
以下工作如我所料。
type Result =
| Success
| Failure
type Response =
| Result of Result
let response = Response.Result <| Result.Success
match response with
| Result result ->
match result with
| Result.Success -> printfn "Success"
| Result.Failure -> printfn "Failure"
但是,当我将其中一些放在模块中时:
module Module =
type Result =
| Success
| Failure
type Response =
| Result of Result
let response = Module.Response.Result <| Module.Result.Success // <- ERROR HERE
我得到错误:
字段、构造函数或成员'Success'未定义
这也意味着我不能像这样进行匹配:
match response with
| Module.Result result ->
match result with
| Module.Result.Success -> printfn "Success"
| Module.Result.Failure -> printfn "Failure"
失败了
这不是构造函数或文字,或者构造函数使用不正确
(要让它失败,需要添加一些额外的代码,使Module 有一个createResponse:
let createResponse b =
if b
then Response.Result <| Result.Success
else Response.Result <| Result.Failure
而模块外代码中的response则为let response = Module.createResponse true。
难道我不应该在模块中放置一些代码都能够获得相同的结果吗?
【问题讨论】:
-
看起来像一个错误,因为
Success甚至出现在 Intellisense 中。 -
是的,也许这真的是一个错误
标签: f#