【问题标题】:Ruby code blocks versus javascript anonymous functions distictionRuby 代码块与 javascript 匿名函数的区别
【发布时间】:2013-12-22 19:36:34
【问题描述】:

我正在做我的第一次实习,一切都很好,我正在努力跟上其他程序员谈论的一切。前几天一位资深程序员告诉我,Ruby 将代码块直接传递给函数的能力比在 JavaScript 中使用匿名函数要好得多。我的理解是 JS 匿名函数是完全一样的——只是通过一个变量作为参数传递一个代码块。是否存在代码块参数优于匿名函数的真实示例?还是只是一种语言优于另一种语言的偏好问题,代码可读性/可重用性问题,还是我只是误解了其他一些基本概念?这是关于在某些任务中使用哪种语言的相对优点的短暂对话,而不是具体的工作问题,这可能是我感到困惑的原因。我在 Google 上搜索了几个简单的代码块示例,并且在 JS 中实现它们时遇到了一些麻烦。期待有关此事的任何意见(匿名或其他)。

【问题讨论】:

  • 您正在寻找可重复使用的东西。但是,您将使用那段代码完全取决于程序员或工作组/开发团队中应用的规则。从本质上讲,两者都以相同的结果为目标。 Lambda(匿名)函数只是使用快速和简短函数回调的一个选项。在 JavaScript 中,它们似乎经常在更大的代码块中使用。只要你知道你只会在调用中使用那一小部分 function ,你可能对 lambda 没有意见,而不是给函数自己的空间(可重用)。
  • 对于 Ruby,你的意思是这样的:def meth1; yield if block_given?; end; meth1 { puts 42 }?
  • @DarekNędza 是的。特别是那种类型的代码块不是 lambda 或类似的。

标签: javascript ruby


【解决方案1】:

它们并不完全相同。主要原因是使用了隐式和显式返回值。

你可以在这里阅读一篇好文章:http://yehudakatz.com/2012/01/10/javascript-needs-blocks/

【讨论】:

  • 这是一本真正精彩的读物! “我承认在我早期作为 Ruby/JavaScript 开发人员时分享的这种印象,错过了一个重要的微妙之处,结果证明有很大的影响。这种微妙之处通常被称为“Tennent 的对应原则”。简而言之,Tennent 的对应原则说:“对于给定的表达式 expr,lambda expr 应该是等价的。” " 谢谢你!
  • 这实际上是准确的答案。公认。我正忙着看博客;>
  • @wormtown 你不需要更多了吗?
  • @DarekNędza 不,谢谢。 phoet 找到了我正在寻找的确切答案。两者之间的确切区别。
  • 我对最新版本的 ecma 的理解是否正确?
猜你喜欢
  • 2011-06-22
  • 2019-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
  • 2010-12-06
相关资源
最近更新 更多