【发布时间】:2011-07-05 05:40:21
【问题描述】:
我知道 Ruby 有很多有用的运算符,例如 ||=
它还有哪些棘手的运算符?
我没有找到任何参考资料。
【问题讨论】:
-
stackoverflow.com/questions/63998/hidden-features-of-ruby。至少,请查看标签 Ruby 的常见问题解答部分:stackoverflow.com/questions/tagged/…
标签: ruby
我知道 Ruby 有很多有用的运算符,例如 ||=
它还有哪些棘手的运算符?
我没有找到任何参考资料。
【问题讨论】:
标签: ruby
方法签名末尾的 & 符号将抓取并等待您的块。
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
【讨论】:
我发现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
因为它同时用于(拆分和创建数组),所以我总是必须在使用它之前检查语法。它可以用于多种用途(例如将哈希转换为数组),我真的很难掌握。
【讨论】:
a, *b = [1, 2, 3],在这种情况下,b 设置为 [2, 3]。
<=> the "spaceship" or comparison operator
=== the "trequals" or case matching operator
【讨论】: