在 F# 中使 printfn/IO 变得纯粹
网上似乎没有太多关于确保 F# 中函数保持纯净的内容。
举个例子,有没有办法让 printfn/IO 在 F# 中变得纯粹?
There doesn't seem to be much online on making sure functions remains pure in F#.
To create an example, is there any way to make printfn/IO pure in F#?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你可以在 google 上搜索 Haskell IO monad 的 F# 实现。 这是一个很好的例子。
you can google for F# implementations of Haskell's IO monad. Here's a nice example.
根据定义,打印到控制台会更改状态(控制台状态)并且确实会产生副作用(例如删除一些控制台缓冲区)。
如果您使用某种 CodeContracts 等,您应该考虑在其他地方写出函数结果,或者使用断言(Contract.Assume 或 Contract.Assert(这用于静态断言))以便更轻松地确认您代码有效。
Printing to the Console is per definition something that changes state (console state) and do have side-effects (like deleting some of the console buffer).
If you are using somekind of CodeContracts or the like you should consider writing out the function result somewhere else, or using an assertion (Contract.Assume or Contract.Assert(this is used for static assertions)) for easier confirmation that you code works.