2010-09-09 39 views

回答

1

這取決於你如何定義「集合」。最自然的選擇可能是「任何可枚舉」或甚至「每種方法的任何東西」。但是這會導致問題,因爲字符串也是可枚舉的 - 至少在紅寶石1.8中。

如果你只需要使用數組的工作,很容易:

def foo(x) 
    if x.is_a? Array 
    x.map {|item| foo(item)} 
    else 
    # Do something with x 
    end 
end 
-2

不知道如果我誤讀的問題或沒有。下面的內容將使它成爲一個函數,它將以同樣的方式處理單個元素或一組元素。只是數組 - 如果參數不是數組,則返回參數,並在必要時解除該參數。

def foo(x) 
    x = [x] unless x.is_a? Array 
    # do array stuff to x 
    return result.size > 1 ? result : result.first 
end 
+0

不是非常確切;如果x == []或x == [1]會發生什麼? – steenslag 2010-09-10 07:09:23

0

您可能感興趣的圖示操作

def foo(x) 
    [*x].map {|item| item.gsub(" ", "_")} 
end 

不幸的是,this'd返回foo("a bear")["a_bear"],而不是"a_bear"沒有數組。

+0

還有一種方法,結果相同:'[x] .flatten.map {' – Nakilon 2010-09-27 11:16:26

1

個人而言,我會用變量ARGS:

def foo(*args) 
    args.each { |arg| puts arg } 
end 

foo("bar")     # bar 
foo("bar", "foobar")   # bar \n foobar 
foo(*%w(bar foobar))   # bar \n foobar 
a = ["bar", "foobar"] 
foo(*a)      # bar \n foobar 
foo("baz", *a)    # baz \n bar \n foobar 
a = "bar" 
foo(*a)      # bar 

如果你不知道你的說法是否是一個字符串或數組,然後只需用*前面加上它。

我發現這給了最大的靈活性,當處理數組可能是一個單一的值,因爲我可以輸入它們只是參數,如果我初始化數組或安全地傳入變量,如果我知道它將要麼數組或單個參數。它會在哈希上窒息。