1

我正在创建一个创建数组的类。(是的,我意识到这已经在 ruby​​ 中可用。这更像是一个练习。)SpecialArray 类基于输入创建一个数组,该输入要么由用户在创建新数组时给出,要么稍后添加到数组中。我无法连接这两个功能。创建一个数组可以正常工作,但添加它却不行。我曾认为输出 atrr_reader 会将现有数组保存在内存中,但现在我不确定。知道我怎样才能完成这项工作吗?

    class SpecialArray
      attr_reader :input, :output

      def initialize(*input)
        @input = input.flatten
        @output = []
        generate_array
      end

      def generate_array
        input.each do |e|
          add(e)
        end
        output
      end

            #update start
    def numerical(element)
      element.class == Fixnum
    end

    def unique(element)
      output.include? element ? false : true
    end

    def valid_e(element)
      unique(element) && numerical(element)
    end

    def numerical(elment)
      element.class == Fixnum
    end

    def unique(element)
      output.include? element ? false : true
    end

    def valid_e(element)
      unique(element) && numerical(element)
    end
        #update end

      def add(element)
        unless valid_e(element) == false
          output.push(element)
        end
        output
      end

    end
4

1 回答 1

0

对我来说似乎工作正常,两者都@input包含@output我传入的数组:

irb(main):032:0> a = SpecialArray.new(1,2,3,4,5,6,7);
irb(main):034:0> puts a.inspect
#<SpecialArray:0x296e7e8 @input=[1, 2, 3, 4, 5, 6, 7], 
                         @output=[1, 2, 3, 4, 5, 6, 7]>
=> nil

编辑完整代码

irb(main):001:0> class SpecialArray
irb(main):002:1>       attr_reader :input, :output
irb(main):003:1>
irb(main):004:1*       def initialize(*input)
irb(main):005:2>         @input = input.flatten
irb(main):006:2>         @output = []
irb(main):007:2>         generate_array
irb(main):008:2>       end
irb(main):009:1>
irb(main):010:1*       def generate_array
irb(main):011:2>         input.each do |e|
irb(main):012:3*           add(e)
irb(main):013:3>         end
irb(main):014:2>         output
irb(main):015:2>       end
irb(main):016:1>
irb(main):017:1*         #...
irb(main):018:1*
irb(main):019:1*       def add(element)
irb(main):020:2>         unless valid_e(element) == false
irb(main):021:3>           output.push(element)
irb(main):022:3>         end
irb(main):023:2>         output
irb(main):024:2>       end
irb(main):025:1>
irb(main):026:1*       def valid_e(e)
irb(main):027:2>         return true;
irb(main):028:2*       end
irb(main):029:1>
irb(main):030:1*         #...
irb(main):031:1*     end
=> nil
irb(main):032:0> a = SpecialArray.new(1,2,3,4,5,6,7);
irb(main):034:0> puts a.inspect
#<SpecialArray:0x296e7e8 @input=[1, 2, 3, 4, 5, 6, 7], 
                         @output=[1, 2, 3, 4, 5, 6, 7]>
=> nil
于 2012-06-27T12:45:59.467 回答