首页 > 解决方案 > 如何从以前的方法中获取随机数据?

问题描述

我有这个代码:

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`"

标签: ruby

解决方案


此处不修改任何代码的最小解决方案是将一个结果作为参数提供给另一个:

def random_both
  random_case(random_name)
end

这是编程的基本原则之一:组合方法调用。

也许你在掩饰这个复杂化。sendRuby 具有动态方法分派,如果您使用并随机选择要使用的方法,这将变得非常简单:

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

推荐阅读