В замечательном репозитории FBlazorShop
Онур Гюмус заимствован из Мастерская пиццы Стива Сандерсона с ароматом F#. В строке 128 из blob/master/FBlazorShop.Web.BlazorClient/Home/Home.fs
[Гитхаб] Онур передает эльфийский Message
для родителя, HomeView
, наследуя ElmishComponent<Model, Message>
, дочернему, PizzaConfigView
, наследуя ElmishComponent<Model, PizzaConfigMsg>
. По соглашению мы можем видеть, как Message
преобразуется (?) в PizzaConfigMsg
следующим образом:
(PizzaConfigMsg >> dispatch)
где dispatch
относится к типу Message -> unit
. На момент написания этой статьи я понятия не имел, как происходит это «преобразование» (отчасти потому, что я отказываюсь компилировать это репо с помощью возвращаемся к .NET core 3.x). Я не знаком с таким использованием оператора >>
. Является ли эта операция на самом деле преобразованием или происходит что-то еще?
Если вы находите >>
запутанным, но чувствуете себя комфортно с |>
, вы можете легко переписать эту строку следующим образом:
fun pizzaMsg -> pizzaMsg |> PizzaConfigMsg |> dispatch
Поскольку тип сообщения верхнего уровня:
type Message =
| SpecialsReceived of PizzaSpecial list
| PizzaConfigMsg of PizzaConfigMsg
| OrderMsg of OrderMsg
| CheckoutRequested of Order
Это говорит нам о том, что код преобразует значение типа PizzaConfigMsg
(которое я назвал pizzaMsg
выше) в Message
верхнего уровня через Message.PizzaConfigMsg
union case, а затем отправляет результат.
Этот стиль кодирования (где аргументы функции становятся неявными, а не явными) называется «бесточечное программирование». Вы можете найти больше информации об этом здесь.