更改此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
状态不同)。