the*_*ist 4 f# idioms function memoization unit-type
如果我已经将其他参数传递给函数,假设该函数是非确定性的,我是否有理由也传递单位参数?我需要担心记忆重复返回值吗?在这种情况下,需要考虑风格或习语的任何方面吗?
如果您已经有一个接受一些参数的函数,但也恰好有一些副作用并且是不确定的,那么我不希望该函数接受额外的unit参数。例如,一个randomPoint函数只接受maxXandmaxY但不接受额外的unit:
let rnd = System.Random()
// Normal way of writing this
let randomPoint maxX maxY =
rnd.Next(maxX), rnd.Next(maxY)
let pt1 = randomPoint 100 200
// You can do this, but it is not usual style
let randomPoint maxX maxY () =
rnd.Next(maxX), rnd.Next(maxY)
let pt2 = randomPoint 100 200 ()
Run Code Online (Sandbox Code Playgroud)
在某些情况下,额外的unit参数可能会有所帮助,但这只是当您想要创建稍后调用的函数时的情况。例如:
let makePointGenerator maxX maxY =
let rnd = System.Random()
fun () -> rnd.Next(maxX), rnd.Next(maxY)
// This should be used as follows
let gen = makePointGenerator 100 200
let pt1 = gen ()
let pt2 = gen ()
// You can call it like this, but it is not the intention
let pt3 = makePointGenerator 100 200 ()
Run Code Online (Sandbox Code Playgroud)
像这样的东西有时可能对记忆有用 - 但这不是自动发生的事情,所以如果您发现自己编写需要此功能的代码,您就会知道。