如果Array
和String
是类定义,那么这些内容是如何定义的?
def whatever(some_input)
some_input = Array(some_input)
end
如何调用它?我们可以将这种行为添加到我们自己的类中,还是只针对核心类?
答案 0 :(得分:5)
它们实际上是Kernel上的方法:
>> Kernel.methods.select { |m| m =~ /^[A-Z]/ }
=> [:Array, :Complex, :Float, :Integer, :Rational, :String, :URI]
而Object includes Kernel所以这些方法随处可见。您可以创建名称以大写字母开头的方法,但这并不常见。
Nokogiri与Nokogiri::HTML
和Nokogiri::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
只是一个非标准名称的标准方法。
答案 1 :(得分:1)
您可以通过Array(arg)
defined?
定义为方法的一种方法
defined?(Integer()) # => "method"