传播可选参数

Dan*_*iel 13 inheritance f# optional-arguments

以下代码无法编译.

type A(?arg) =
  member __.Arg : string option = arg

type B(?arg) =
  inherit A(arg) //ERROR expected type string but has type 'a option
Run Code Online (Sandbox Code Playgroud)

我假设这是因为必须提供选项的基础类型的实例,并且编译器处理传递Some/ None基于语法.

假设我的假设已被正确假设,是否有解决方法?是否可以传播可选参数?

des*_*sco 25

F#spec 8.13.5方法成员的可选参数

调用者可以使用以下技术指定可选参数的值:

  • 按名称,例如arg2 = 1.
  • 通过按名称传播现有的可选值,例如?arg2 = None或?arg2 = Some(3)或?arg2 = arg2.在构建一个将可选参数传递给另一个的方法时,这非常有用.
  • 通过使用与position匹配的普通,未命名参数.

    type A(?arg) =
        member __.Arg : string option = arg
    
    type B(?arg) =
        inherit A(?arg = arg) 
    
    printfn "1. %A" (B()).Arg // None
    printfn "2. %A" (B("1")).Arg // Some "1"
    
    printfn "3. %A" (A()).Arg // None
    printfn "4. %A" (A("1")).Arg // Some "1"
    
    Run Code Online (Sandbox Code Playgroud)