更改此Ruby类的名称会导致错误

更改此Ruby类的名称会导致错误,ruby,syntax-error,yield,Ruby,Syntax Error,Yield,我有下面的代码,它应该运行: class Array def my_name first_name = "Bob" last_name = "Smith" yield(first_name, last_name) end end ['a', 'b', 'c', 'd'].my_name {|i, x| puts "#{i} #{x}"} 但是,当我将类名从“Array”更改为其他名称(如“Array1”)时,我得到以下错误: `<main>': u

我有下面的代码,它应该运行:

class Array
  def my_name
    first_name = "Bob"
    last_name = "Smith"
    yield(first_name, last_name)
  end
end

['a', 'b', 'c', 'd'].my_name {|i, x| puts "#{i} #{x}"}
但是,当我将类名从“Array”更改为其他名称(如“Array1”)时,我得到以下错误:

`<main>': undefined method `my_name' for ["a", "b", "c", "d"]:Array                              (NoMethodError)

我一辈子都搞不清楚到底出了什么问题。我只是想弄清楚如何在类中的方法上使用屈服函数。我真的有麻烦,如果有人能帮助我,我将不胜感激。谢谢

['a'、'b'、'c'、'd']
是类
Array
的实例(而不是
Array1
类)。为了能够调用类
Array1
中定义的方法,您应该首先创建该类的实例

Array1.new.my_name {|i, x| puts "#{i} #{x}"}
# Bob Smith
#=> nil

['a'、'b'、'c'、'd']
是类
Array
的实例(而不是
Array1
类)。为了能够调用类
Array1
中定义的方法,您应该首先创建该类的实例

Array1.new.my_name {|i, x| puts "#{i} #{x}"}
# Bob Smith
#=> nil

由于未知原因,您正试图在
数组
实例上调用新引入的方法。只要把它放在属于它的地方:

Array1.new.my_name { |i, x| puts "#{i} #{x}" }

由于未知原因,您正试图在
数组
实例上调用新引入的方法。只要把它放在属于它的地方:

Array1.new.my_name { |i, x| puts "#{i} #{x}" }

将数组子类化是一个非常糟糕的主意。如果只是为了添加一个方法,情况就更糟了。但我想这就是我困惑的地方。我将前面指定的两个类放在不同的文件中。他们不应该单独跑吗?如果数组在我的.rb文件中根本不存在,为什么['a','b','c','d']是数组的实例?@John123 Array是一个核心类。你总是可以访问它和它的方法。看在上帝的份上,为什么有人会在这里将
Array
子类化?调用方法
my_name
需要什么特定的
Array
行为?@SergioTulentsev我从来没有说过对数组进行子类化是个好主意。OP问重命名核心类有什么问题-我回答。他问我如何让它工作——我展示了。你说得对,不需要对数组进行子类化。对数组进行子类化是一个非常糟糕的主意。如果只是为了添加一个方法,情况就更糟了。但我想这就是我困惑的地方。我将前面指定的两个类放在不同的文件中。他们不应该单独跑吗?如果数组在我的.rb文件中根本不存在,为什么['a','b','c','d']是数组的实例?@John123 Array是一个核心类。你总是可以访问它和它的方法。看在上帝的份上,为什么有人会在这里将
Array
子类化?调用方法
my_name
需要什么特定的
Array
行为?@SergioTulentsev我从来没有说过对数组进行子类化是个好主意。OP问重命名核心类有什么问题-我回答。他问我如何让它工作——我展示了。你说得对,不需要对数组进行子类划分。顺便说一句,
收益率
不是一个函数,而是一个关键字(即与
def
end
状态相同,与
put
状态不同)。顺便说一句,
收益率
不是一个函数,而是一个关键字(即与
def
end
状态相同,与
put
状态不同)。