Рассматривая то, что у вас есть, я думаю, это больше похоже на то, что вы действительно хотите:
require 'set'
feelings = {
euphoria: Set.new(%w[happy high]),
dysphoria: Set.new(%w[sad low]),
miserable: Set.new(%w[sad angry])
}
puts "What are you feeling right now?"
mood = Set.new gets.scan(/\w+/)
name, _ = feelings.find{ |_,matches| matches.subset?( mood ) }
if name
puts "You are experiencing a state of #{name}"
else
puts "Your experience is undocumented."
end
Вызов gets.scan(/\w+/)
возвращает массив строк.Это лучше, чем просто .split(',')
, потому что позволяет пользователю ставить пробел после запятой (например, «грустный, счастливый») или просто использовать пробелы (например, «грустный счастливый»).1008 * требует нескольких аргументов для этого.Вместо этого мы используем Set.new
, который принимает массив значений.В качестве альтернативы вы могли бы использовать mood = Set[*gets.scan(/\w+/)]
, где *
принимает массив значений и передает их в качестве явных параметров.
Кроме того, я изменил с proper_subset?
на subset?
, потому что "счастливыйhigh "не" собственно подмножество "happy, high", но это подмножество.