ruby
2013-04-21 2 views 10 likes 
10

Я начинаю изучать Ruby, нужна помощь с включением? метод.Как я могу логически или два включить? условия в Ruby?

Код ниже работает просто отлично:

x = 'ab.c' 
if x.include? "." 
    puts 'hello' 
else 
    puts 'no' 
end 

Но когда я код это так:

x = 'ab.c' 
y = 'xyz' 
if x.include? "." || y.include? "." 
    puts 'hello' 
else 
    puts 'no' 
end 

Если дает мне ошибку, когда я запускаю его:

test.rb:3: syntax error, unexpected tSTRING_BEG, expecting keyword_then or ';' o 
r '\n' 
if x.include? "." || y.include? "." 
           ^
test.rb:5: syntax error, unexpected keyword_else, expecting end-of-input 

Is это потому, что включить? метод не может иметь дескриптор логики?

Благодаря

+3

Добавить круглые скобки? 'if x.include? (". ") || y.include? (".") ' – Ryan

ответ

11

Другой ответ и комментарий правильны, вам просто нужно включить круглые скобки вокруг своего аргумента из-за правил синтаксического анализа языка в Ruby, например,

if x.include?(".") || y.include?(".") 

Вы также можете просто структурировать ваш условный, как это, которая будет масштабироваться более легко, как добавить больше массивов для поиска:

if [x, y].any? {|array| array.include? "." } 
    puts 'hello' 
else 
    puts 'no' 
end 

См Enumerable#any? для более подробной информации.

+1

Спасибо! '(.include? (". "))' работал! Фактически '(.include?". ")' Работает и что я использую, поскольку это имеет смысл для меня. 'x.include? (". ")' все еще дал мне ошибки. – Andrew

+0

'x' и' y' в контексте кода OP не являются массивами, они являются строками. 'include?' работает, потому что String определяет метод 'include? '. Итак, технически, этот ответ работает, но объяснение неверно. –

+0

Не используйте '(.include? (". "))'. Если это работает, в вашем коде есть лишние вещи. –

11

Это из-за Рубиновый синтаксический анализ, он не может распознать разницу между пропусканием аргументами и логическими операторами.

Немного измените свой код, чтобы отличить аргументы и оператор для анализатора Ruby.

if x.include?(".") || y.include?(".") 
    puts 'hello' 
else 
    puts 'no' 
end 
Смежные вопросы