Ruby -> Как установить аргумент, требующий диапазона - PullRequest
1 голос
/ 10 февраля 2020
def input_to_index(user_input = 1..9)
     @user_input.to_i - 1
   end

Мне нужно, чтобы аргумент был только от 1 до 9 и был введен в качестве сильного изначально. Я знаю, что код, указанный в аргументе, точно неверен, я просто не уверен, что указывать в нем, можно указать только диапазон 1-9.

Ответы [ 2 ]

3 голосов
/ 10 февраля 2020

Это довольно просто, все, что вам нужно сделать, это использовать raise с соответствующим условием:

def input_to_index(user_input)
  user_input = user_input.to_i
  raise ArgumentError unless (1..9).include?(user_input)

  user_input - 1
end

Таким образом, метод будет вызывать ArgumentError каждый раз, когда входной аргумент недопустим. Вы можете описать в качестве второго аргумента raise, например:

 raise ArgumentError, 'Input should be in range 1-9' unless (1..9).include?(user_input)
0 голосов
/ 10 февраля 2020
def input_to_index(user_input)
  raise ArgumentError unless user_input.match?(/\A[1-9]\z/)
  user_input.to_i - 1
end

input_to_index('3')
  #=> 2
input_to_index('0')
  #=> ArgumentError (ArgumentError)
input_to_index('10')
  #=> ArgumentError (ArgumentError)
input_to_index('3 blind mice')
  #=> ArgumentError (ArgumentError)

Регулярное выражение соответствует строке, состоящей из одного ди git между '1' и '9'. \A и \z являются якорями , соответствующими началу и концу строки соответственно. [1-9] - это класс символов , который соответствует одному из символов в диапазоне от 1 до 9 (так же, как [123456789]). См. Соответствие строки #? и Регулярное выражение .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...