c# – 国家设计模式的功能等效

前端之家收集整理的这篇文章主要介绍了c# – 国家设计模式的功能等效前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
与国家设计模式相当的功能编程是什么?或者更具体地说,this Wikipedia example国家设计模式将如何转化为FP?

解决方法

这个模式是使用 State monad的一个例子,一个计算
环境增加了状态的代码.

这是Haskell中的一个实现.

一些助手:

import Control.Monad.Trans.State
import Control.Monad.IO.Class
import Data.Char

程序的两种运行模式

data Mode = A | B

使用此模式进行状态计算的类型,增加了一个计数器.

type StateM a = StateT (Int,Mode) IO a

函数,一个在StateM上下文中的函数,
根据状态模式改变其行为:

writeName :: String -> StateM ()
writeName s = do
    (n,mode) <- get
    case mode of
        A -> do liftIO (putStrLn (map toLower s))
                put (0,B)
        B -> do let n' = n + 1
                liftIO (putStrLn (map toUpper s))
                if n' > 1 then put (n',A)
                          else put (n',B)

运行程序,最初在状态A启动状态计算

main = flip runStateT (0,A) $do
    writeName "Monday"
    writeName "Tuesday"
    writeName "Wednesday"
    writeName "Thursday"
    writeName "Saturday"
    writeName "Sunday"

从上面的代码,主要的输出是:

monday
TUESDAY
WEDNESDAY
thursday
SATURDAY
SUNDAY

请注意,这是一个纯功能解决方案.此程序中没有可变或破坏性的更新.相反,状态monad通过计算线程化所需的模式.

猜你在找的C#相关文章