如何从以前的方法中获取随机数据?

时间:2019-06-28 02:04:15

标签: ruby

我有此代码:

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

我需要编写最简单的代码来返回其中一个

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

1 个答案:

答案 0 :(得分:3)

这里修改任何代码的最小解决方案是将一个结果作为另一个的参数:

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")}"