1

配列を作成するクラスを作成しています。(はい、Ruby では既に利用可能です。これは演習のようなものです。) クラス SpecialArray は、新しい配列を作成するときにユーザーが指定したか、後で配列に追加された入力に基づいて配列を作成します。これら 2 つの機能を接続するのに問題があります。配列の作成は正常に機能しますが、追加は機能しません。出力 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 に答える