0
比方说,我有一个类型:访问匿名函数
type State[S, +A] = S => (A,S)
和功能:
def foo(): State[Obj, (x, y)]
如果我调用这个函数:
val result = foo() // result is an anonymous function: Obj => ((x, y), Obj)
哪有我访问Obj
和(x, y)
值?
比方说,我有一个类型:访问匿名函数
type State[S, +A] = S => (A,S)
和功能:
def foo(): State[Obj, (x, y)]
如果我调用这个函数:
val result = foo() // result is an anonymous function: Obj => ((x, y), Obj)
哪有我访问Obj
和(x, y)
值?
为了获得(x, y)
的具体值和Obj
的最终状态,您需要将初始值Obj
传递到您的函数中。类似:
val (coords, finalObj) = foo().run(initObj)
(I可以记错在scalaz状态单子的run
方法的名称)。
UPDATE
其实,我觉得这只是apply
,所以foo()(initObj)
会工作(虽然我可能会获得对foo
定义摆脱不必要的括号,降低了最终调用只是foo(initObj)
) 。
因为'State'被定义为一个函数,所以你可以调用'apply',而不是'run'。 –
当我传递一个initObj时,我得到'initObj'状态,而不是'finalObj'。你可以在第48行看到我的消息来源吗? - https://github.com/kman007us/side-work/blob/master/CandyMachine/CandyMachine.scala –
[这是一个要点](https://gist.github.com/anonymous/6987251)我曾尝试过修改您的源代码以使用您在代码中定义的State monad来工作。尤其要看看'go'的运作方式。注:这是非常粗糙和准备就绪,只是想传达一般想法。 – Shadowlands