mkProgram是否公开了比mkSimple更多的功能?

Ben*_*erg 7 f# fable-f# elmish

我试图理解fable-Elmish中mkSimple和mkProgram之间的区别,或者我实际使用的Elmish.WPF.(有人可能会为elmish.wpf生成一个标签吗?)

我发现Elmish.WPF非常有效,我在生产中使用它,但我现在处于一个我每天仍在学习的阶段.这个特殊的问题吞噬了我太多的研究时间,所以我很感激一些帮助.

源代码中的注释如下所示.

mkSimple: Simple program that produces only new state with 'init' and 'update'.

mkProgram: Typical program, new commands are produced by 'init' and 'update' along with the new state.

那些命令有什么用呢?我已经在几个地方看了一些例子,但他们并没有提供很多线索,我是否可以使用mkSimple和mkProgram一样,这就是我需要知道的.

mkProgram是否暴露了mkSimple没有的功能,或者无论我使用哪一个都能完成所有功能?mkSimple仅用于简单的演示使用吗?我应该将mkProgram用于增长的真实世界应用程序吗?如果你能同时做到这两点,那为什么会有区别?

Cha*_*ert 8

mkSimple实际上只是为了学习目的.它通过不引入现有的想法,帮助新用户进入框架Cmd.

如果你看一下mkSimple,你会看到,所有它做的是隐藏的Cmd想法(通过Cmd.none),并调用mkProgram:

/// Simple program that produces only new state with `init` and `update`.
let mkSimple 
    (init : 'arg -> 'model) 
    (update : 'msg -> 'model -> 'model)
    (view : 'model -> Dispatch<'msg> -> 'view) =
    { init = init >> fun state -> state,Cmd.none
      update = fun msg -> update msg >> fun state -> state,Cmd.none
      view = view
      setState = fun model -> view model >> ignore
      subscribe = fun _ -> Cmd.none
      onError = onError }
Run Code Online (Sandbox Code Playgroud)

它的起源来自Elm Architecture,后来将简单的程序重命名为beginnerProgram.

如果您想要编写任何复杂程序,请使用mkProgram.如果您只是修补或演示基础知识,您可以使用mkSimple.