Как получить случайные данные из предыдущих методов? - PullRequest
0 голосов
/ 28 июня 2019

У меня есть этот код:

name = "Jordan"

def upper(string)
  string.upcase
end

def lower(string)
  string.downcase
end

def random_name
  ["Ollie", "Ana"].sample
end

def random_case(string)
  [upper(string), lower(string)].sample
end

# Please write your code between this line...

# ... and this line

puts "My name is #{random_both()}"

Мне нужно написать простейший код, который можно вернуть либо

"`My name is ollie`" or
"`My name is OLLIE`" or 
"`My name is ANA`" or
"`My name is ana

Я пытался:

def random_both
  random_name + random_case
end

def random_both
  random_name.swapcase
end

random_both = random_name + random_case

Iнужно написать простейший код, который можно вернуть либо

"`My name is ollie`" or
"`My name is OLLIE`" or
"`My name is ANA`" or
"`My name is ana`"

1 Ответ

3 голосов
/ 28 июня 2019

Минимальное решение здесь без изменения любого кода состоит в том, чтобы передать результат одного в качестве аргумента другому:

def random_both
  random_case(random_name)
end

Это один из базовых принципов программирования: объединение вызовов методов.

Может быть, ты усложняешь это. В Ruby есть динамическая диспетчеризация методов, которая делает это довольно тривиальным, если вы используете send и выбираете метод, который хотите использовать случайным образом:

def random_case(str)
  str.send([ :upcase, :downcase ].sample)
end

Тогда вы называете это так:

puts "My name is #{random_case("Ollie")}"

Объедините это со случайным именем:

puts "My name is #{random_case([ "Ollie", "Ana" ].sample)}"

Это много кода на Ruby, который нужно вставить в некоторую интерполяцию строк. Есть способ сделать это более кратким, используя переменные аргументы :

def random_case(*list)
  list.sample.send([ :upcase, :downcase ].sample)
end

Где теперь метод принимает ноль или более аргументов, так что теперь вы можете сделать:

puts "My name is #{random_case("Ollie", "Ana")}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...