水晶静态变量

Mat*_*tte 2 static-variables crystal-lang

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
Run Code Online (Sandbox Code Playgroud)

Joh*_*ler 5

Crystal 没有作用域为方法的静态变量。您需要为此使用类变量

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
Run Code Online (Sandbox Code Playgroud)

您也可以使用宏class_propertyclass_setterclass_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
Run Code Online (Sandbox Code Playgroud)