以下是我必须完成的挑战的图片。我已经尝试了两种方法来解决此问题,但仍然无法解决。
以下是我如何解决此问题的摘要。这可能根本没有意义,因为我试图通过应用我从前一段时间学习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)}"
答案 0 :(得分:1)
不应该
输入“我的名字是#{my_name.upcase}”
工作吗?如果要使其成为方法,则可以只返回给定参数的.upcase。我不使用红宝石,所以我对其他人的了解不多。
答案 1 :(得分:0)
答案 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