【问题标题】:What do you call the -> operator in Ruby?你如何称呼 Ruby 中的 -> 运算符?
【发布时间】:2012-01-18 14:00:06
【问题描述】:
  1. 您如何称呼-> 运算符,如下所示?

    ->(...) do
      ...
    end
    
  2. 下面的 sn-ps 不是等效的吗?

    succ = ->(x) {x + 1}
    succ = lambda {|x| x + 1}
    

【问题讨论】:

  • 不能用谷歌搜索很烦人 "->" - 好问题!
  • @Kevin 但是,您可以使用 Stack Overflow 的内置 Elastic Search 来搜索 "->": title:"->" [ruby] is:question。关键是要使用引号。
  • Symbolhound 也可以这样做:symbolhound.com/?q=-%3E+ruby
  • 烦人或不烦人,但谷歌搜索“ruby ->”请求将链接到这个问题作为第一个最佳结果。
  • @Kevin 也许在过去 2 年里事情发生了变化,但我在谷歌上搜索 ruby "->" 是我找到这篇文章的方式 :)

标签: ruby syntax


【解决方案1】:

Ruby 编程语言(“方法、过程、Lambda 和闭包”)中,使用 -> 定义的 lambda 被称为 lambda 字面量

succ = ->(x){ x+1 }
succ.call(2)

代码相当于下面的代码。

succ = lambda { |x| x + 1 }
succ.call(2)

非正式地,我听说它被称为 stabby lambdastabby literal

【讨论】:

    【解决方案2】:

    => == 哈希火箭

    将键与哈希映射文字中的值分开。


    -> == 短跑火箭

    用于在 Ruby 1.9.X(不带 args)和 Ruby 2.X(带 args)中定义 lambda 字面量。你给出的例子(->(x) { x * 2 } & lambda { |x| x * 2 })其实是等价的。

    【讨论】:

    • 仅供参考如果您使用do/end,由于优先规则,这两种样式不能完全互换。这将打印一个检查过的 lambda:puts -> do 1 end。这会将块传递给puts,从 lambda 中窃取它并导致 ArgumentError:puts lambda do 1 end
    • 此外,ruby 1.9.3 的 lambda 字面量确实允许参数。
    • @Kelvin 那是因为 Ruby 试图将 puts lambda do 1 end 解释为 puts(lambda) do 1 end 而不是 puts(lambda do 1 end)。后者确实有效 - 如果没有括号,Ruby 只是尝试将块传递给 puts 方法而不是 lambda 方法。
    • @PJSCopeland 我并不是说你不能让他们采取同样的行动。我是说它们在语法上不是 100% 可互换的,也就是说,你不能在所有情况下都简单地进行替换(因为有时你需要为 lambda 加上额外的括号)。
    • @rdurand 您是否使用摘要“Stabby lambdas cannot accept arguments in Ruby 1.9”进行了编辑?这是不准确的,至少对于 1.9.3 - 参数是允许的。
    【解决方案3】:

    Lambda 火箭

    我从这篇文章中得到了这一点。 但首先谷歌搜索 ruby lambda 速记 http://ruby-journal.com/becareful-with-space-in-lambda-hash-rocket-syntax-between-ruby-1-dot-9-and-2-dot-0/

    【讨论】:

    • 搜索词建议 +1
    【解决方案4】:

    ->(x) { ... }lambda { |x| ... } 相同。它创建了一个 lambda。请参阅Kernel#lambda lambda 是一种 proc,它确保传递给它的参数数量是正确的。另见Proc::newKernel#proc

    【讨论】:

      猜你喜欢
      • 2011-01-16
      • 2014-01-16
      • 2013-02-14
      • 1970-01-01
      • 2014-08-22
      • 2012-01-20
      • 1970-01-01
      • 2013-04-29
      • 2010-12-21
      相关资源
      最近更新 更多