Ruby中的动态常量赋值

时间:2016-02-11 09:26:16

标签: ruby constants

下面显示的是红宝石代码。

def parse_file(file)
  parsed_data = {}
  TOTAL = []
  Maths = []
  Physics = []
  Chemistry = []
  read_lines(file) { |line|
    arr=l.split
    if l.match(/TOTAL/i)
      TOTAL = arr[1].to_i
    end
    if l.match(/maths/i)
      Maths = arr[1].to_i
    end
    if l.match(/physics/i)
      Physics = arr[1].to_i
    end
    if l.match(/chemistry/i)
      Chemistry = arr[1].to_i
    end
  }
  if TOTAL != Maths + Physics + Chemistry && TOTAL != 0
    parsed_data[:not_matched] = "True"
  end
  return parsed_data
end

它提供了多个“动态常量赋值”错误:

-:3: dynamic constant assignment
      TOTAL = []
             ^
-:4: dynamic constant assignment
      Maths = []
             ^
-:5: dynamic constant assignment
      Physics = []
               ^
-:6: dynamic constant assignment
      Chemistry = []
                 ^
-:10: dynamic constant assignment
          TOTAL = arr[1].to_i
                 ^
-:13: dynamic constant assignment
          Maths = arr[1].to_i
                 ^
-:16: dynamic constant assignment
          Physics = arr[1].to_i
                   ^
-:19: dynamic constant assignment
          Chemistry = arr[1].to_i
                     ^

我可以做出哪些改变,以免影响我的意图?

2 个答案:

答案 0 :(得分:4)

将其更改为本地变量,例如total

答案 1 :(得分:2)

错误表示"动态常量分配"。 CAPITAL_LETTERS被视为常量,不得在代码中动态分配新值。

因此,您最好将TOTAL更改为total等本地变量