You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby报错求助:'cannot be used in conjunction (ArgumentError)'

搞定你的Ruby代码错误!

嘿,我来帮你排查这个ArgumentError: cannot be used in conjunction的问题,顺便把代码里的其他小问题也一起修复了:

1. 触发错误的核心原因:JSON.load参数冲突

Ruby的JSON.load方法有个小坑——它不能同时接收第二个proc参数和第三个options哈希参数。你现在写的JSON.load(file, nil, symbolize_names: true)里,把nil当proc传进去,又加了symbolize_names的选项,这俩参数凑一起就触发了这个错误。

解决这个很简单,要么换成更常用的JSON.parse(推荐,语法更清晰),要么把多余的nil删掉:

# 推荐写法:用JSON.parse直接加选项
JSON.parse(file, symbolize_names: true)

# 或者调整JSON.load的写法,去掉nil
JSON.load(file, symbolize_names: true)

2. 藏在代码里的拼写错误

你把permissions(权限)拼成了permisisons,两处都要改:

  • 类方法名:self.permisisons_from_template → self.permissions_from_template
  • 初始化方法里的调用:User.permisisons_from_template → User.permissions_from_template
    这个拼写错误如果没改,运行的时候还会报“找不到方法”的错误哦。

3. 补全未写完的save方法

你的save方法里.to_...明显没写完,应该是.to_json。我给你补全了保存到文件的逻辑,这样实例就能把自己存成JSON文件了:

def save
  self_json = {email: @email, name: @name, permissions: @permissions}.to_json
  # 把邮箱里的特殊字符替换掉,避免文件名出错
  filename = "#{@email.gsub('@', '_').gsub('.', '_')}_user.json"
  File.write(filename, self_json)
end

修正后的完整代码

require 'json'

class User
  attr_accessor :email, :name, :permissions

  def initialize(*args)
    @email = args[0]
    @name = args[1]
    @permissions = User.permissions_from_template
  end

  def self.permissions_from_template
    file = File.read 'user_permissions_template.json'
    JSON.parse(file, symbolize_names: true)
  end

  def save
    self_json = {email: @email, name: @name, permissions: @permissions}.to_json
    filename = "#{@email.gsub('@', '_').gsub('.', '_')}_user.json"
    File.write(filename, self_json)
  end
end

额外小建议

你用*args来初始化的话,如果传入的参数不够2个,@email或@name会变成nil,可以改成给参数加默认值的写法,这样调用起来更灵活:

def initialize(email = nil, name = nil)
  @email = email
  @name = name
  @permissions = User.permissions_from_template
end

比如User.new('test@example.com')或者User.new都能正常运行啦。

内容的提问来源于stack exchange,提问作者Wade73

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:34:06