- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在一个模块中有一个通用类型,该类型在另外两个可区分的联合类型中使用。
为了方便起见,我给它们取了一个相同的名字。其他名称不同。接下来,我正在尝试制作一个在控制台中打印类型的助手。
由于匹配案例中的类型不匹配,第一行编译失败。我已经尝试了一些方法,无论是否打开模块、强制类型等,它仍然失败。
另一件事是,如果我将鬃毛更改为 Common1 和 Common2,它可以正常工作。
我记得读过具有相同签名的类型存储在相同的内部类型中,但我的真实示例具有不同的签名并且仍然失败。
我是不是漏掉了什么地方?
例子:
示例编译失败:
Error This expression was expected to have type OneA but here has type OneB
错误module commonThings =
type CommonThing =
| Comm1 of int
| Comm2 of int
module thingA =
open commonThings
type OneA =
| A1 of string
| Common of CommonThing
| A2 of string
module thingB =
open commonThings
type OneB =
| B1 of string
| Common of CommonThing
| B2 of string
module printAB =
open commonThings
open thingA
open thingB
let printA (msg:OneA) =
match msg with
| A1 v -> printfn "A1"
| Common v -> printfn "Common"
| A2 v -> printfn "A2"
module main =
[<EntryPoint>]
let main argv =
printfn "%A" argv
0 // return an integer exit code
最佳答案
当您打开 thingB
模块时,类型 OneB
进入范围,Common
案例标签来自类型 OneA
被 OneB
类型的隐藏。
当类型或联合/事件模式案例之间发生名称冲突时,最近的一个获胜。重新排序打开会使其偶然工作:
open thingB
open thingA
正确的解决方案是在案例名称前加上前缀。还有 RequireQualifiedAccess
属性,您可以使用它来强制类型(或模块)始终需要其内部结构的前缀。
关于f# - F# 命名约定是否禁止在不同光盘中使用相同的名称。工会类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37493104/
我想用 list-style-type: disc; 列出一些程序。 但是列表项没有这个“disc”并且有滚动条,我不知道为什么......看这里(Link)。 它应该只是一个带有光盘图标的列表,每个
使用 cygwin 终端,我的 .bashrc 中有以下内容: export WINHOME="/cygdrive/c/Users/userName" export TUTORING="$WINHOM
我创建了一个别名,以免每次我移动到一个新目录时都写 ls: alias cl='cd_(){ cd "$@" && ls; }; cd_' 假设我有一个名为“下载”的文件夹(我当然碰巧有),所以我只需
我是一名优秀的程序员,十分优秀!