gpt4 book ai didi

ruby - 参数错误 : wrong number of arguments in Ruby

转载 作者:数据小太阳 更新时间:2023-10-29 07:21:00 24 4
gpt4 key购买 nike

试图解决这个问题,

  class Person
def initialize(name)
@name=name
end

def greet(other_name)
puts "Hi #{other_name}, my name is #{name}"
end
end

initialize("ak")
greet("aks")

但我收到如下错误:

ArgumentError: wrong number of arguments calling `initialize` (1 for 0)

我不明白这里问的是什么,如果它只是参数那么为什么错误就像(1 对 0)。有人可以帮我理解这个问题。

最佳答案

看这段代码:

class Person
attr_reader :name

def initialize( name )
puts "Initializing Person instance #{object_id}"
@name = name
end

def greet( name )
puts "Hi #{name}, I'm #{name()}"
end
end

当你在没有显式接收者的情况下编写initialize时:

initialize( "ak" )

您的消息被识别只是运气问题。看看谁回复了:

method( :initialize ).owner
#=> BasicObject

BasicObject,所有 Object 实例的始祖,她回应了你的呼吁,责备你错误的参数数量,因为:

method( :initialize ).arity
#=> 0

不仅此方法不需要任何参数,而且您根本不需要调用它。事实上,除非特殊情况,否则您不应该自己对任何对象调用 #initializeClass#new 方法为您处理 Person#initialize 方法的调用:

A = Person.new( 'Abhinay' )
Initializing Person instance -605867998
#=> #<Person:0xb7c66044 @name="Abhinay">

Person.new 处理新实例的创建并自动调用其 #initialize 方法。此外,#initialize 方法是私有(private)创建的,即使您没有明确指定它也是如此。这种不正常行为的技术术语是 magic . Person#initialize 神奇地私有(private):

A.initialize( 'Fred' )
NoMethodError: private method `initialize' called for #<Person:0xb7c66044 @name="Abhinay">

您知道,您不能只是将自己重新初始化为“Fred”。除非另有规定,否则所有其他方法都是公开的:

A.greet "Arup"
Hi Arup, I'm Abhinay
#=> nil

关于ruby - 参数错误 : wrong number of arguments in Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22294187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com