2011-02-27 101 views
3

我知道Ruby有一堆有用的运营商,如||=整蛊运营商在Ruby中

它有什么其他棘手的运营商?

我还没有找到它的相关资料。

+0

http://stackoverflow.com/questions/63998/hidden-features-of-ruby。至少请检查标签Ruby的FAQ部分:http://stackoverflow.com/questions/tagged/ruby?sort=faq&pagesize=50 – sorens 2011-02-27 17:50:46

回答

1
<=> the "spaceship" or comparison operator 
=== the "trequals" or case matching operator 
5

方法签名末尾的&符将抓住并期待一个块。

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

的符号也可以以这种形式用于调用to_proc,让调用:address方法用一个符号(例如是从其他地方借来)

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

+=-=快捷操作便利。

不是一个运算符,而是Rails使得另一个捷径成为可能。这将让你栏时,foo是要么nil?false

a = foo || bar 

在“经营者”的方面,我发现了一个非官方的东西在这里以供参考:Ruby operators

+0

谢谢。 foo ||酒吧对我来说很方便 – AntonAL 2011-03-03 07:39:21

5

我发现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 

由于它被用于两者(分裂和创建数组),我总是必须在使用它之前检查语法。它可以用于很多目的(如将哈希转换为数组),我真的觉得很难掌握。

+1

WOW!摔跤运营商是真棒!它使我的代码非常纯粹。非常感谢 ! – AntonAL 2011-03-04 13:07:21

+1

这两个示例都没有使用splat操作符,但更有趣的示例是在“解包”列表时调用函数,例如'func(* [1,2,3])。 – haridsv 2012-01-27 02:13:56

+2

该运算符的另一个有趣用途是部分列表解包,例如'a,* b = [1,2,3]',在这种情况下,'b'设置为'[2,3]'。 – haridsv 2012-01-27 02:20:03