Как поставить имя в верхнем регистре? - PullRequest
0 голосов
/ 22 июня 2019

Здесь ниже картина испытания, которое я должен выполнить.Я уже попробовал два способа решить эту проблему, но я все еще не могу это исправить.

enter image description here

Ниже приведен фрагмент того, как я пытался решить проблему.Это может не иметь смысла вообще, потому что я пытался решить проблему, применяя то, что я помню из изучения Ruby некоторое время назад. Как объяснено на картинке выше, пожалуйста, не меняйте код, который находится за пределами «# Пожалуйста, напишите свой код ниже этой строки ...» и «# ... и выше этой строки».комментарий.

my_name = "Jordan"

# Please write your code below this line...

# The first way i tried to fix this problem
def my_name(name)
  upper = my_name.upcase
  my_name = upper.upcase! 

# Second way i tried to to fix this problem 

def my_name(name)
  upper = my_name.upcase
  upper.upcase!
end

# ...and above this line.

puts "My name is #{upper(my_name)}"

Ответы [ 4 ]

1 голос
/ 22 июня 2019

Не должен:

поставить "Меня зовут # {my_name.upcase}"

работать?Если вы хотите превратить его в метод, вы можете просто вернуть .upcase указанного параметра.Я не использую рубин, поэтому я бы не знал так много, как другие.

0 голосов
/ 24 июня 2019

Другие ответы дают достаточные решения, но я хотел бы поделиться , почему это происходит с вами. Вы были близки, но есть небольшой нюанс в том, что upcase! работает, что не интуитивно понятно

У вашего исходного кода есть:

upper = my_name.upcase

Метод my_name.upcase получает ваш ввод Jordan, преобразует его (как и ожидалось) и назначает его переменной upper.

Но у вас также была эта строка:

my_name = upper.upcase! 

Что эквивалентно "JORDAN".upcase! (потому что первый вызов upcase уже расшифровал текст для вас. В соответствии с документами ruby, на которые я ссылался выше, этот метод возвращает nil , если не было внесено никаких изменений Так как вы уже добавили слово, никаких изменений не произойдет, поэтому он возвращает nil

Вы можете использовать одно из решений в других, или просто удалить вторую строку, где вы звоните upcase!

Это все, что вам действительно нужно сделать:

def my_name(name)
  name.upcase
end
0 голосов
/ 22 июня 2019

Попробуйте это.

def upper(str, target)
  str.gsub(/\b#{target}\b/i) { |s| s.upcase }
end

target = "jordan"

upper("My name is Jordan", target)
  #=> "My name is JORDAN" 
upper("My name is Bob", target)
  #=> "My name is Bob" 
upper("My name is Jordanny", target)
  #=> "My name is Jordanny" 
upper("My name is Bojordan", target)
  #=> "My name is Bojordan

upper("My name is Bob", "bob")
  #=> "My name is BOB" 

Разрывы слов (\b) предотвращают совпадения в двух последних примерах.См. Строка # gsub .Примечание:

/\b#{target}\b/i
  #=> /\bjordan\b/i 
0 голосов
/ 22 июня 2019

https://apidock.com/ruby/String/upcase

Просто вызовите метод в верхнем регистре класса String

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