2011-02-27 46 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