Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

290
Views
Convertir el ejemplo de introducción de Spectre.Console a F#

Me gustaría usar Spectre.Console en una aplicación de consola F#. Estoy tratando de convertir el ejemplo de Introducción de C# a F#. A continuación se muestra mi intento:

 open System open Spectre.Console.Cli type AddSettings() = inherit CommandSettings() [<CommandArgument(0, "[PROJECT]")>] member val Project = "" with get, set type AddPackageSettings() = inherit AddSettings() [<CommandArgument(0, "<PACKAGE_NAME>")>] member val PackageName = "" with get, set [<CommandOption("-v|--version <VERSION>")>] member val Version = "" with get, set type AddReferenceSettings() = inherit AddSettings() [<CommandArgument(0, "<PROJECT_REFERENCE>")>] member val ProjectReference = "" with get, set type AddPackageCommand() = inherit Command<AddPackageSettings>() override _.Execute (context, settings) = 0 type AddReferenceCommand() = inherit Command<AddReferenceSettings>() override _.Execute(context, settings) = 0 // Define a function to construct a message to print let from whom = sprintf "from %s" whom [<EntryPoint>] let main argv = let message = from "F#" // Call the function let app = CommandApp() app.Configure(fun config -> config.AddBranch<AddSettings>("add", fun add -> add.AddCommand<AddPackageCommand>("package") add.AddCommand<AddReferenceCommand>("reference") ) ) app.Run(argv)

Desafortunadamente, recibo el siguiente error del compilador:

 The type 'AddPackageCommand' is not compatible with the type 'ICommandLimiter<AddSettings>'

El tipo 'AddPackageCommand' no es compatible con el tipo 'ICommandLimiter'

Gracias por cualquier ayuda.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Así es como resolví ese problema:

  1. Agregue explícitamente interface ICommandLimiter<AddSettings> a las subclases de Command que usan la herencia en la configuración de AddSettings .
  2. Cambie la llamada AddBranch para inferir el argumento genérico simplemente anotando el tipo de IConfigurator : config.AddBranch("add", fun (add: IConfigurator<AddSettings>) -> ... .
 open System open Spectre.Console.Cli type AddSettings() = inherit CommandSettings() [<CommandArgument(0, "[PROJECT]")>] member val Project = "" with get, set type AddPackageSettings() = inherit AddSettings() [<CommandArgument(0, "<PACKAGE_NAME>")>] member val PackageName = "" with get, set [<CommandOption("-v|--version <VERSION>")>] member val Version = "" with get, set type AddReferenceSettings() = inherit AddSettings() [<CommandArgument(0, "<PROJECT_REFERENCE>")>] member val ProjectReference = "" with get, set type AddPackageCommand() = inherit Command<AddPackageSettings>() interface ICommandLimiter<AddSettings> override _.Execute (context, settings) = 0 type AddReferenceCommand() = inherit Command<AddReferenceSettings>() interface ICommandLimiter<AddSettings> override _.Execute(context, settings) = 0 // Define a function to construct a message to print let from whom = sprintf "from %s" whom [<EntryPoint>] let main argv = let message = from "F#" // Call the function let app = CommandApp() app.Configure(fun config -> config.AddBranch("add", fun (add: IConfigurator<AddSettings>) -> add.AddCommand<AddPackageCommand>("package") |> ignore add.AddCommand<AddReferenceCommand>("reference") |> ignore ) ) app.Run(argv)
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!