在此 Ruby class 上更改名称会导致错误
Changing the name on this Ruby class causes an error
我有以下代码,它可以正常运行:
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}"}
但是当我将 class 名称从 "Array" 更改为其他名称时,比如 "Array1",我收到以下错误:
`<main>': undefined method `my_name' for ["a", "b", "c", "d"]:Array (NoMethodError)
我不确定该错误是什么意思,但它破坏了我的代码。这是损坏的代码:
class Array1
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}"}
对于我的生活,我无法弄清楚出了什么问题。我真的只是想弄清楚如何在 class 中的方法上使用 yield 函数。我真的遇到了麻烦,如果有人可以帮助我,我将不胜感激。谢谢!
['a', 'b', 'c', 'd']
是 class Array
的实例(不是 Array1
class 的实例)。为了能够调用 class Array1
中定义的方法,您应该首先创建该 class.
的实例
Array1.new.my_name {|i, x| puts "#{i} #{x}"}
# Bob Smith
#=> nil
由于未知原因,您试图在 Array
实例上调用新引入的方法。只需在它所属的地方称呼它:
Array1.new.my_name { |i, x| puts "#{i} #{x}" }
我有以下代码,它可以正常运行:
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}"}
但是当我将 class 名称从 "Array" 更改为其他名称时,比如 "Array1",我收到以下错误:
`<main>': undefined method `my_name' for ["a", "b", "c", "d"]:Array (NoMethodError)
我不确定该错误是什么意思,但它破坏了我的代码。这是损坏的代码:
class Array1
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}"}
对于我的生活,我无法弄清楚出了什么问题。我真的只是想弄清楚如何在 class 中的方法上使用 yield 函数。我真的遇到了麻烦,如果有人可以帮助我,我将不胜感激。谢谢!
['a', 'b', 'c', 'd']
是 class Array
的实例(不是 Array1
class 的实例)。为了能够调用 class Array1
中定义的方法,您应该首先创建该 class.
Array1.new.my_name {|i, x| puts "#{i} #{x}"}
# Bob Smith
#=> nil
由于未知原因,您试图在 Array
实例上调用新引入的方法。只需在它所属的地方称呼它:
Array1.new.my_name { |i, x| puts "#{i} #{x}" }