在Ruby语言中,您可以Float像强大的方式一样调用函数来确保参数是Float或可解析为float的字符串(包括科学记数法等).
例如:
Float(1.0) # => 1.0
Float('1.0') # => 1.0
Float('-1.23') # => -1.23
Float('-1e+2') # => -100.0
Run Code Online (Sandbox Code Playgroud)
但是,Ruby文档似乎没有在任何地方描述这种行为(Float v2.1.0,Float v1.9.3).
我在哪里可以找到此功能的文档?
它在这里定义了Kernel#Float.此功能是ruby提供的内置转换功能(由Avdi Grimm创造的术语)的一部分.
" 你真的,真的,想要将输入对象转换为核心类型,无论原始类型是什么.例如,如果有任何合理的方法,你需要确保任何输入被强制转换为整数 -输入数据是浮点数,零数字,还是十六进制数字. " 自信代码,Avdi Grimm.
例如,使用Kernel#Array转换函数,想象一个占用0个,1个或更多帖子的方法.
def process_post(post_or_posts)
posts = Array(post_or_posts)
posts.each do |post|
.... # do something post
end
end
Run Code Online (Sandbox Code Playgroud)
当使用不同的输入调用方法时,这提供了一些灵活性:
process_post("post1")
process_post(["post1", "post2"])
process_post(nil)
Run Code Online (Sandbox Code Playgroud)
如果我们在没有函数的情况下实现它,我们可能需要做这样的事情:
def process_post(post_or_post)
if post_or_post # now we have to check for nil
# we might have to check for instance of Array to make sure we can iterate now.
# etc..
end
end
Run Code Online (Sandbox Code Playgroud)
这一系列功能无疑可以创建灵活的API.