{"record":{"id":"9a8e9236981b4c49","repo":"ruby-concurrency/concurrent-ruby","slug":"wrong-number-of-arguments-0-for-1-9a8e92","errorCode":null,"errorMessage":"wrong number of arguments (0 for 1+)","messagePattern":"wrong number of arguments \\(0 for 1\\+\\)","errorType":"exception","errorClass":"ArgumentError","httpStatus":null,"severity":"error","filePath":"lib/concurrent-ruby/concurrent/mutable_struct.rb","lineNumber":213,"sourceCode":"    rescue NoMethodError\n      raise NameError.new(\"no member '#{member}' in struct\")\n    end\n\n    private\n\n    # @!visibility private\n    def initialize_copy(original)\n      synchronize do\n        super(original)\n        ns_initialize_copy\n      end\n    end\n\n    # @!macro struct_new\n    def self.new(*args, &block)\n      clazz_name = nil\n      if args.length == 0\n        raise ArgumentError.new('wrong number of arguments (0 for 1+)')\n      elsif args.length > 0 && args.first.is_a?(String)\n        clazz_name = args.shift\n      end\n      FACTORY.define_struct(clazz_name, args, &block)\n    end\n\n    FACTORY = Class.new(Synchronization::LockableObject) do\n      def define_struct(name, members, &block)\n        synchronize do\n          clazz = Synchronization::AbstractStruct.define_struct_class(MutableStruct, Synchronization::LockableObject, name, members, &block)\n          members.each_with_index do |member, index|\n            clazz.send :remove_method, member\n            clazz.send(:define_method, member) do\n              synchronize { @values[index] }\n            end\n            clazz.send(:define_method, \"#{member}=\") do |value|\n              synchronize { @values[index] = value }\n            end","sourceCodeStart":195,"sourceCodeEnd":231,"githubUrl":"https://github.com/ruby-concurrency/concurrent-ruby/blob/0b88d5ff75f69b3740c8f0868e76f833cb2fd45d/lib/concurrent-ruby/concurrent/mutable_struct.rb#L195-L231","documentation":"Concurrent::MutableStruct.new is the class-factory call that defines a new mutable, thread-safe struct class from a list of member names. Calling it with zero arguments raises ArgumentError 'wrong number of arguments (0 for 1+)' because a struct with no members is not definable.","triggerScenarios":"Concurrent::MutableStruct.new with no members; Concurrent::MutableStruct.new(*fields) where fields is an empty array from a dynamic schema; splatting an options hash by mistake so the member list is lost.","commonSituations":"Generating struct classes from DB columns, CSV headers, or API payloads where the source can be empty; refactoring member lists into a constant that silently becomes []; confusion between defining the class (new) and instantiating it.","solutions":["Pass at least one member: Concurrent::MutableStruct.new(:a, :b)","Guard dynamic member lists before the call: skip struct creation or raise a domain-specific error when the list is empty","Log the member list when it is computed from external data so empty inputs are visible"],"exampleFix":"# before\nmembers = columns.map(&:to_sym) # [] when the table is empty\nKlass = Concurrent::MutableStruct.new(*members)\n\n# after\nraise ArgumentError, 'cannot define struct with no members' if members.empty?\nKlass = Concurrent::MutableStruct.new(*members)","handlingStrategy":"validation","validationCode":"raise ArgumentError, 'at least one struct member required' if members.empty?\nKlass = Concurrent::MutableStruct.new(*members)","typeGuard":"->(list) { list.is_a?(Array) && !list.empty? && list.all? { |m| m.is_a?(Symbol) || m.is_a?(String) } }","tryCatchPattern":"begin\n  Concurrent::MutableStruct.new(*members)\nrescue ArgumentError => e\n  raise SchemaError, \"cannot define struct: #{e.message}\"\nend","preventionTips":["Guard dynamically built member lists (DB columns, JSON keys) for emptiness before generating classes","Cache generated struct classes keyed by member list","Distinguish the factory call (.new on MutableStruct) from instance creation in code review"],"tags":["ruby","struct","argument-validation","metaprogramming"],"backgroundTag":"missing-required-argument","analyzedSha":"0b88d5ff75f69b3740c8f0868e76f833cb2fd45d","analyzedAt":"2026-08-21T20:12:56.291Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}