ArgumentError:Ruby 中的参数数量错误

2024-06-20

试图解决这个问题,

  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 for 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

该方法不仅不需要任何参数,而且您根本不需要调用它。事实上,您不应该打电话#initialize除特殊情况外,您可以自行处理任何物体。Class#new方法处理调用Person#initialize适合您的方法:

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

Person.new处理新实例的创建并自动调用它#initialize方法。还,#initialize方法被创建为私有的,即使您没有明确指定它。这种不规则行为的技术术语是magic http://odetocode.com/Blogs/scott/archive/2010/07/13/ruby-initialize-and-super.aspx. Person#initialize神奇地是私有的:

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

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

A.greet "Arup"
Hi Arup, I'm Abhinay
#=> nil
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ArgumentError:Ruby 中的参数数量错误 的相关文章

  • Gitlab 机架攻击安装

    我正在安装 gitlab 并遵循 Gitlab 安装指南的所有说明 一切正常 但在 初始化数据库并激活高级功能 步骤中 它失败了 https github com gitlabhq gitlabhq blob master doc inst
  • 如何将 stderr 和 stdout 重定向到 Ruby 脚本文件?

    如何将 stderr 和 stdout 重定向到 Ruby 脚本文件 From 在 Ruby 脚本中 您可以重定向stdout and stderr与IO reopen http ruby doc org core classes IO h
  • Rails JSON 多重嵌套关联

    我有一个对象 测试列表 其中包含问题和奖励问题 每个问题都有一个主题模型 我试图将它们全部包含在 JSON API 中 但我不断收到奇怪的难以理解的语法错误消息 我可以让它处理问题和主题或奖励问题和主题 但不能同时处理两者 这是我现在所拥有
  • 从delayed_job工作线程中排除队列

    在delayed jobs 中 可以为特定队列运行工作线程 我似乎找不到任何有关如何运行工作人员并排除特定队列的示例 文档 我试图让 1 名工作人员处理超高优先级的事情 1 名工作人员处理其余的事情 通过指定哪些队列与哪些工作人员相关来实现
  • 如果 json 有多个数据集,我该如何编写 json 模式

    我是这个 json 模式的新手 如果它只有一个数据集 我可以编写 json 模式 如下所示 employees id 1 name aaa 示例 json schema 是 type object required employees pr
  • 使用单表继承更改 Rails 中 ActiveRecord 类的类型

    我有两种类型的课程 BaseUser lt ActiveRecord Base and User lt BaseUser 它使用 Authlogic 的身份验证系统来 acts as authentic 这种继承是使用单表继承来实现的 如果
  • 如何设计销毁会话并从控制器注销?

    设计销毁会话并从控制器注销 if something is not kosher 1 log this event 2 send notice redirect to destroy user session path and return
  • 如何在具有名为“attribute”的列的数据库上使用 ActiveRecord? (危险属性错误)

    我正在访问一个无法更改的数据库 它有一个名为attribute定义的 每当我尝试访问attribute 我得到这个异常 属性 由 ActiveRecord ActiveRecord DangerousAttributeError 定义 my
  • 无主键的 ActiveRecord 模型

    我有一个 ActiveRecord 模型GPA没有主键 class GPA lt ActiveRecord Base end 当我尝试打电话时GPA first to json I get TypeError false is not a
  • 运行“bundle install”失败并要求我运行“bundle install”

    事实上 当从我从 git 存储库克隆的现有 Rails 应用程序内部运行时 所有与 gem 相关的命令都会导致相同的错误消息 bundle install Could not find tzinfo 0 3 27 in any of the
  • 无||假与假||红宝石中的零

    nil false回报false and false nil回报nil 有人对此有解释吗 在 Ruby 中 一切都是表达式 表达式将返回其中计算的最后一个值 对于您的两个示例 左侧 表达式的计算结果为假值 因此 Ruby 然后计算右侧并返回
  • 使用自定义令牌进行 Firebase 身份验证

    我有一个 firebase 项目 我试图从我的 Rails 服务器进行身份验证 按照文档上的说明使用 ruby jwt 库创建自定义令牌 但我不断收到相同的错误 auth invalid custom token 自定义令牌格式不正确 请检
  • 退出无法在 Heroku 上工作 - 使用 Devise gem 和 Rails 4

    我刚刚对使用 Devise 进行身份验证的 Rails 4 应用程序进行了初始部署到 Heroku 注销可以在本地进行 但 Heroku 返回错误 您正在查找的页面不存在 并且不会注销用户 根据 Heroku 日志和 Google SO 搜
  • RVM 安装问题 - 无法执行端口 (autoconf)

    我正在尝试在 OSX mountain lion 上安装 Jekyll 首先我想安装RVM 然后安装最新的ruby 但是 RVM 安装失败 我无法解决问题 任何帮助表示赞赏 这是我所做的 安装的 OSX 命令行工具 尝试安装 RVM cur
  • Windows 上的 ruby​​ 中出现 SSL 错误

    我收到以下错误 C Users user Desktop folder gt ruby exchange rate rb C Ruby23 x64 lib ruby 2 3 0 net http rb 933 in connect nonb
  • Bundler 找不到 gem“rack”的兼容版本:

    我是 Ruby 新手 但实际上如果我不想安装 Redmine 我就不需要它 我正在按照以下说明进行操作http www redmine org projects redmine wiki HowTo install Redmine on C
  • 如何在 Rails 应用程序中选择性地跟踪方法及其文件访问?

    对于 Rails 应用程序 我想重载或修改 Kernel load 以便它打印出完整路径 例如puts gt File expand path File dirname FILE File basename FILE 对于加载的每个 Rai
  • 如何按键按字母顺序对 Ruby 哈希进行排序

    我正在尝试按键按字母顺序对哈希进行排序 但如果不创建自己的排序类 我似乎无法找到一种方法来做到这一点 我发现下面的代码可以按值排序 如果它是整数 我正在尝试修改它 但没有任何运气 temp ninjas 36 temp pirates 12
  • 在 Rails 6 上添加外部 js 文件

    我在 app gt javascript gt packs 下创建了一个名为 custom 的文件夹 并放置以下外部 js metisMenu min js startmin js 然后在 app gt javascript gt pack
  • 登录西纳特拉?

    我无法弄清楚如何使用 Sinatra 记录消息 我不想记录请求 而是在我的应用程序中的某些点记录自定义消息 例如 当获取 URL 时 我想记录 Fetching url 这就是我想要的 指定日志级别的能力 例如 logger info Fe

随机推荐