Возврат данных из функции F # - PullRequest
2 голосов
/ 23 апреля 2019

Я новичок в F #. У меня есть функция, которая выполняет некоторые операции с базой данных. Я изо всех сил возвращаюсь результат.

let funcA () = 
 let funcB () = 
    // do some database operation and returns seq of records
 let funcC () = 
    // do some other database operation returns nothing
 let result = funcB ()
 funcC ()

Как мне вернуть result с funcA? Мне нужно выполнить funcB до funcC

Ответы [ 2 ]

4 голосов
/ 23 апреля 2019

Последняя строка функции должна быть вашим возвращаемым значением.В вашем случае вам не обязательно вкладывать сюда функции, но мы можем оставить все как есть.Кроме того, важно отметить, что по умолчанию F # является языком с высокой оценкой, поэтому, если вы определите свои функции без каких-либо параметров, они будут фактически оцениваться заранее (и не будут изменяться при будущих выполнениях).Если на самом деле вам не нужны никакие параметры для вашей функции, укажите значение unit в качестве параметра.

let funcA () = // Function defintion

вместо

let funcA = // Function definition

let funcA () = 
 let funcB () = 
     // Perform database operation
 let funcC () = 
     // Perform some side-effect, returns ()

 let result = funcB ()
 funcC ()

 result // This will be your return value

let a = funcA () // Example usage
0 голосов
/ 26 апреля 2019

Принятый ответ работает нормально, но он не очень fsharp-y

Если ваш funcC может выполняться только после funcB, это можно сделать более явным, используя тип результата funcB в качестве входных данных для funcC,Или, что еще лучше, используйте схему железной дороги:

let funcA () =
  let funcB () : Result<Seq<Foo>, string> =
    // perform database operation, return Ok <| sequence of Foo if successful
    // otherwise Error <| "sql failed"

  let funcC x =
    // perforn some side effect
    x //return input
  funcB ()
  |> Result.map funcC

( См. Отличные посты Скотта Влашинса о программировании, ориентированном на железную дорогу )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...