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`"
解决方案
此处不修改任何代码的最小解决方案是将一个结果作为参数提供给另一个:
def random_both
random_case(random_name)
end
这是编程的基本原则之一:组合方法调用。
也许你在掩饰这个复杂化。send
Ruby 具有动态方法分派,如果您使用并随机选择要使用的方法,这将变得非常简单:
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")}"
推荐阅读
- ios - 如何从安全区域制作自定义样式 UITableViewCell 插入?
- testing - cypress 是否支持像 selenium 这样的跨浏览器测试,或者是否有任何限制
- r - 用于简单自动化问题的循环或 lapply 循环
- java - 在 REST 控制器中使用 AtomicLong
- list - SML列表分解问题
- java - 在 Java 中处理自定义文件异常
- mysql - 如何将mysql中的属性设置为二进制?
- angular - 在 Angular 组件中对导入的服务方法使用 forkJoin() 时,“void”类型的参数不可分配
- sas - SAS:如何知道哪个宏称为当前宏?
- google-bigquery - 如何将 BigQuery 数据集从一个区域复制到另一个区域?