代码之家  ›  专栏  ›  技术社区  ›  Matthieu Raynaud de Fitte

晶体静态变量

  •  2
  • Matthieu Raynaud de Fitte  · 技术社区  · 7 年前

    Crystal有静态变量吗?或者我必须使用具有文件/全局作用域的全局变量吗?

    def test(value)
      static var = 1
      var += value
      return var
    end
    
    pp test 0 #=> 1
    pp test 1 #=> 2
    pp test 1 #=> 3
    pp test 0 #=> 3
    
    1 回复  |  直到 7 年前
        1
  •  5
  •   Faustino Aguilar Johannes Müller    7 年前

    Crystal没有适用于方法的静态变量。你需要使用 class variables 为此:

    class Test
      @@var = 1
      def self.test(value)
        @@var += value
        return @@var
      end
    end
    
    pp Test.test 0 #=> 1
    pp Test.test 1 #=> 2
    pp Test.test 1 #=> 3
    pp Test.test 0 #=> 3
    

    也可以使用宏 class_property , class_setter class_getter

    class Test
      class_property var = 1
    end
    
    Test.var += 0
    pp Test.var #=> 1
    Test.var += 1
    pp Test.var #=> 2
    Test.var += 1
    pp Test.var #=> 3
    Test.var += 0
    pp Test.var #=> 3