如何定义像Array(arg)和String(arg)这样的快捷方式?

如果ArrayString是类定义,那么这些内容是如何定义的?

 def whatever(some_input) some_input = Array(some_input) end 

如何调用它? 我们可以将此行为添加到我们自己的类中,还是仅适用于核心类?

它们实际上是内核上的方法:

 >> Kernel.methods.select { |m| m =~ /^[AZ]/ } => [:Array, :Complex, :Float, :Integer, :Rational, :String, :URI] 

而Object包含内核,因此这些方法随处可用。 您可以创建名称以大写字母开头的方法,但这并不常见。

Nokogiri与Nokogiri::HTMLNokogiri::XML构造函数做类似的事情。 例如,在Nokogiri你会发现:

 module Nokogiri class << self ### # Parse HTML. Convenience method for Nokogiri::HTML::Document.parse def HTML thing, url = nil, encoding = nil, options = XML::ParseOptions::DEFAULT_HTML, &block Nokogiri::HTML::Document.parse(thing, url, encoding, options, &block) end end #... end 

所以HTML只是一个非标准名称的标准方法。

您可以通过使用已定义的方法显示Array(arg)被定义为方法的一种方法defined?

 defined?(Integer()) # => "method"