2017-09-11 15 views
-1

我可以做以下事情嗎?如果是這樣如何?在Ruby中,如何檢查符號是否在符號數組中?

我有符號

symbols = %w{:sym1 :sym2 :sym3} # is this correct implementation? 

# I'm putting this in a function for this illustration 
def check_symbol(symbol) 
    symbols.include?(symbol) 
end 

puts check_symbol(:sym1) # expect true, but I get false 
puts check_symbol(:sym44) # expect false of course 

我該怎麼辦,所以我第一個看跌期權的語句獲得真正的陣列?

+0

通過@eugen的答案是正確的,但你也有你的方法,一個錯字。應該是'symbols.include?(symbol)'。 – moveson

+2

單步執行IRB中的代碼會告訴你'symbols'是一個字符串數組,而不是符號。你應該養成驗證你的假設的習慣,作爲準備尋求代碼幫助的一部分,你的同事會非常感激這一點。 – meagar

+0

是的,我使用irb並將其看作一串字符串,因此我問了這個問題。現在我知道%i {...}是什麼。 –

回答

3

您可以指定符號數組作爲%i[ ... ]

並檢查您的符號是否在您可以使用的所有符號數組中?檢查是否所有這些與真正的迴應.is_a?(Symbol),然後,如果數組包含特定一個,如:

array_of_symbols = %i[sym1 sym2 sym3] 
p array_of_symbols.all? { |e| e.is_a?(Symbol) } && array_of_symbols.include?(:sym1) 
# true 
+0

也被稱爲[Ruby百分比符號](https://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Literals#The_.25_Notation)。 – anothermh

2

您沒有一個符號數組,您擁有的是一個看起來像符號的字符串數組。 正確的定義是

symbols = %i{sym1 sym2 sym3}

相關問題