在阅读F# Component Design GuidelinesåŽï¼Œæˆ‘没有看到任何评论我是å¦åº”该声明模å—&它的类型具有相åŒçš„å称。
通常我的项目没有任何循环ä¾èµ–ï¼Œå› æ¤æˆ‘ä¸éœ€è¦åˆ¶ä½œæ–°æ¨¡å—(例如InfrastructureTypes
或DomainTypes
)将æ¯ç§ç±»åž‹æ”¾åœ¨ä¸€ä¸ªåœ°æ–¹
例如,如果我有一个记录类型System
å’Œä¸€å †å‡½æ•°ï¼Œæˆ‘åº”è¯¥æŠŠæ‰€æœ‰å†…å®¹æ”¾åœ¨ä¸€ä¸ªæ¨¡å—文件ä¸å—?这是我的å°è¯•ï¼š
// System.fs
module System
type rec System =
{ name : string
children : System list }
let init () = { name = ""; children = [] }
let addChild system child =
{ system with system.children = child :: system.children }
let removeChild system child =
let rec removeChild children acc child =
match children with
| c :: children ->
if c <> child then removeChild children (c :: acc) child
else removeChild children acc child
| [] -> List.rev acc
let children = removeChild system.Children [] child
{ system with system.children = children }
ç”案 0 :(得分:6)
Fï¼ƒæ ¸å¿ƒåº“æœ¬èº«çš„ä¸€ç§å¸¸è§æ–¹æ³•æ˜¯åœ¨åŒä¸€çº§åˆ«å…·æœ‰åŒå的模å—和类型(而ä¸æ˜¯åƒç¤ºä¾‹ä¸é‚£æ ·åœ¨æ¨¡å—内部使用类型) 。例如,有一个List<'a>
类型和一个List
模å—,其ä¸åŒ…å«ç”¨äºŽå¤„ç†å®ƒçš„函数的函数。与Option
,Set
,Result
ç‰
如果您已ç»æœ‰ä¸€ä¸ªå…·æœ‰ç»™å®šå称的类型,则å¯ä»¥æ·»åŠ 一个属性以å…许创建具有相åŒå称的模å—而ä¸ä¼šå‡ºçŽ°ç¼–译器错误:[<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
然而,由于F#4.1,这是éšå«çš„ã€‚å› æ¤ï¼Œå®šä¹‰ä¸€ä¸ªä¸Žè¯¥ç±»åž‹å称相åŒçš„模å—,并且在编译代ç 时,å•è¯Module
å°†ä½äºŽæ¨¡å—å称的末尾。
type System =
{ name : string
children : System list }
module System =
let init () = { name = ""; children = [] }
我认为这一切æ„味ç€è¿™å¯ä»¥æ˜¯åœ¨F#ä¸ä½¿ç”¨çš„有效模å¼ã€‚ç‰¹åˆ«æ˜¯å½“ä½ æœ‰ä¸€ä¸ªå¾ˆå¥½çš„æŠ½è±¡ã€‚æ‚¨å¯èƒ½å¸Œæœ›æŸ¥æ‰¾â€œæŠ½è±¡æ•°æ®ç±»åž‹â€ï¼Œå› 为我认为它们适用于æ¤å¤„。
查看我上é¢ç»™å‡ºçš„示例,这通常更åƒæ˜¯ä¸€ä¸ªåº“级模å¼ï¼Œä½†æˆ‘å¬è¯´è¿‡å®ƒå¯ä»¥åº”用于应用程åºä»£ç ä¸çš„良好效果。我å¯ä»¥æƒ³è±¡å®ƒå¯ä»¥å¸®åŠ©æ‚¨æ€è€ƒå’Œå®žæ–½æŠ½è±¡è¾¹ç•Œå¹¶ä¿æŒä»£ç 组织。