SQL Server: СЛУЧАЙ, КОГДА ИЛИ ТОЛЬКО КОНЕЦ = > ИЛИ не поддерживается

Ваш класс C # использует параметры со значением по умолчанию, который немного отличается от перегруженных конструкторов. В любом случае F # поддерживает как перегруженные конструкторы, так и параметры по умолчанию.

Используя значения по умолчанию для параметров, код будет выглядеть так:

type SharedRegistry(?useCache: bool) = 
    do 
      // constructor logic
    inherit PageRegistry(defaultArg useCache true) 

Теперь вы можете создать экземпляр следующим образом:

let r1 = new SharedRegistry() // using the default value
let r2 = new SharedRegistry(false) // specified explicitly
let r3 = new SharedRegistry(useCache=false) // using named parameter

Я верю, что использование именованных параметров немного более элегантно в F #. Способ, которым он работает, заключается в том, что параметр useCache становится option<bool> под обложкой (это может быть проблемой, если вы хотите использовать класс из C #)

Что касается перегруженных конструкторов - ваш код F # должен (см. ответ из kvb ). В общем случае, вероятно, лучше иметь хотя бы один неявный конструктор (так как это позволяет вам автоматически обращаться к параметрам конструктора внутри тела класса, объявлять поля с помощью let и реализовывать логику конструктора с помощью do). Неявный конструктор должен быть тем, который принимает все параметры. В некоторых случаях вы можете сделать это частным, что можно сделать следующим образом:

type SharedRegistry private (useCache: bool) = 
    inherit PageRegistry(useCache) 
    do 
      // constructor logic
    new () = SharedRegistry(true)
541
задан Somnath Muluk 10 August 2016 в 13:12
поделиться