为啥返回函数叫return?
Posted
技术标签:
【中文标题】为啥返回函数叫return?【英文标题】:Why is the return function called return?为什么返回函数叫return? 【发布时间】:2014-04-24 20:43:00 【问题描述】:return函数为什么叫return?
描述是:
将值注入一元类型。
这个名字不仅没有意义(对我来说),而且对于来自命令式语言的人来说,它是令人困惑的,其中return
是从函数返回的语言关键字。
【问题讨论】:
我个人认为没有意义,pure
是Applicative
的更好选择。由于每个Monad
都是Applicative
和(希望)pure = return
,因此在即将到来的Functor -> Applicative -> Monad
重组中将return
完全排除在Monad
的定义之外并不难。
嗯,它看起来确实像 liftM f x = do x' <- x; return (f x)
等代码中的命令式控制流关键字
这是一个随意的选择,最好只是假设你对英文单词“return”定义的直觉不会帮助你理解 monad return
操作。
责备菲尔·瓦德勒。 :)
我不明白为什么人们认为这是一个基于意见的问题。这是一个有效的问题。
【参考方案1】:
为什么叫它?因为它通常是一元代码块中的最后一个函数。通常使用return
的唯一理由是从您的一元操作中设置最终返回值。
我也认为这是一个非常非常糟糕的名字选择。但我们现在不能修复它......
【讨论】:
其实,现在我们可以了。让我们停止使用return
,而始终使用pure
!【参考方案2】:
这纯粹是历史性的。大多数 Haskell 开发人员都认为这是一个坏名字。它打破了最小惊喜原则。相当多的旧库函数有点不稳定(我想到了过多的错误处理方案和一些其他类型类元素名称)。
正如@bheklilr 所说,正在进行的重组应该会有所帮助:
http://www.haskell.org/haskellwiki/Functor-Applicative-Monad_Proposal如果您对 Haskell 的元数据感兴趣,这些是很好的起点:
http://www.haskell.org/haskellwiki/Future_of_Haskell http://www.haskell.org/haskellwiki/Category:History【讨论】:
感谢您的链接。【参考方案3】:答案是因为它返回了一些东西。例如,您在 php 中使用它 - 在其中回显某些内容,它会返回该文本或数据。但功能的主要力量并不在于直接回显数据。它们的能力在于存储数据并返回变量/数组或类似的数据存储位置。
您还可以根据数据/计算返回真或假。在类中,函数被命名为方法并且做同样的事情——返回一些东西。在 java 中返回可以是 void(回显数据),或严格数据类型(例如布尔值,或字符串、数组等)。
返回函数后没有返回数据。
【讨论】:
这个答案在技术上并没有错,但部分原因是它是 too vague to actually make any statement — 甚至不清楚您实际上是在谈论 Haskell 中的return
方法。您知道这与过程/OO 语言中的return
关键字“几乎但不完全”完全不同,对吧? — 关于您的第一句话:每个 function 在 Haskell 中返回一些内容。以上是关于为啥返回函数叫return?的主要内容,如果未能解决你的问题,请参考以下文章