2017-09-11 18 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}

相关问题