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