【问题标题】:How to override multi dimensional array operator ruby如何覆盖多维数组运算符ruby
【发布时间】:2022-11-17 13:14:02
【问题描述】:

我想覆盖多维数组运算符

worksheet['column1'][1]= 'works' should change worksheet so that in row 1 in 'column1' value is 'works'.

我对工作表所做的其他事情有效,所以这不是连接问题。我也没有收到任何错误,但它不起作用。

我试过这个:

def self.[]=(col,row,value)
  $ws[col,row] = value
end

我也试过这个:

def self.[]=(*args)
  (col,row,value) = args
  $ws[col,row] = value
end

【问题讨论】:

    标签: arrays ruby multidimensional-array overriding operators


    【解决方案1】:

    worksheet['column1'][1]=语句其实不是一个方法调用,而是两个。因此,要使其工作,您需要定义两个方法。

    我会尝试以下操作:

    # create a new column class
    class Column
      def initialize(sheet, column)
        @sheet = sheet
        @column = column
      end
    
      def []=(row, value)
        @sheet[@column, row] = value
      end
    end
    
    # use like this
    def self.[](column)
      Column.new($ws, column)
    end
    

    第一个 [] 调用将返回一个 Column 的实例,它存储指向工作表和要设置的列的指针。指向工作表的指针实际上不是必需的,因为您使用的是全局 $ws 变量。但是全局变量在 Ruby 中通常被认为是一种代码味道,因此我会显式地传递它以使将来的重构更容易。

    第二个[]= 调用将由列实例处理。

    【讨论】:

      猜你喜欢
      • 2013-01-27
      • 2014-01-05
      • 2011-04-12
      • 1970-01-01
      • 2010-12-11
      • 2019-07-11
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      相关资源
      最近更新 更多