【问题标题】:Tricky operators in Ruby [closed]Ruby 中棘手的运算符 [关闭]
【发布时间】:2011-07-05 05:40:21
【问题描述】:

我知道 Ruby 有很多有用的运算符,例如 ||=

它还有哪些棘手的运算符?

我没有找到任何参考资料。

【问题讨论】:

标签: ruby


【解决方案1】:

方法签名末尾的 & 符号将抓取并等待您的块。

def foo(bar, &block)  
   block.call (bar += 1)  
end

这种形式中也可以使用&号来调用to_proc,让你用符号调用:address方法(例子是从别处借来的)

@webs ||= Web.find(:all).index_by &:address

+=-= 之类的快捷方式很方便。

不是操作员,而是 Rails 提供的另一个快捷方式。当 foo 是 nil?false 时,这会让你得到 bar

a = foo || bar

关于“运营商”,我在这里找到了一个(非官方的)东西供参考:Ruby operators

【讨论】:

  • 谢谢。富 ||酒吧对我来说很方便
【解决方案2】:

我发现splat operator 是最棘手的 Ruby 运算符之一:

它拆分数组:

a,b,c = *[1,2,3]

或者构建一个数组:

*a = 1,2,3

也可以用在case声明中:

first = ["one", "two"]
second = ["three", "four"]

case number
  when *first
    "first"
  when *second
    "second"
end

它可以用作可变参数的函数参数:

def stuff *args
   args.join('|')
end

因为它同时用于(拆分和创建数组),所以我总是必须在使用它之前检查语法。它可以用于多种用途(例如将哈希转换为数组),我真的很难掌握。

【讨论】:

  • 哇! Splat 操作员很棒!它使我的代码非常纯净。非常感谢!
  • 这两个示例都可以在没有 splat 运算符的情况下工作,但更有趣的示例是在“解包”列表时调用函数,例如,`func(*[1,2,3])。跨度>
  • 此运算符的另一个有趣用途是部分列表解包,例如,a, *b = [1, 2, 3],在这种情况下,b 设置为 [2, 3]
【解决方案3】:
<=> the "spaceship" or comparison operator
=== the "trequals" or case matching operator

【讨论】:

    猜你喜欢
    • 2013-05-13
    • 1970-01-01
    • 2019-06-05
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多