如何将名称大写?

时间:2019-06-22 12:06:26

标签: ruby

以下是我必须完成的挑战的图片。我已经尝试了两种方法来解决此问题,但仍然无法解决。

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 个答案:

答案 0 :(得分:1)

不应该

输入“我的名字是#{my_name.upcase}”

工作吗?如果要使其成为方法,则可以只返回给定参数的.upcase。我不使用红宝石,所以我对其他人的了解不多。

答案 1 :(得分:0)

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

只需调用String类的方法大写

"jordan".upcase

答案 2 :(得分:0)

尝试一下。

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)阻止了匹配。参见String#gsub。注意:

/\b#{target}\b/i
  #=> /\bjordan\b/i 

答案 3 :(得分:0)

其他答案提供了足够的解决方案,但我想与您分享为什么。您很亲近,但是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