冰糕:实例变量必须在`initialize`

时间:2019-07-16 05:52:59

标签: ruby sorbet

获取-实例变量必须在initialize内部声明,即使我已经在initialize中声明了实例变量。

我正在使用typed: strict输入检查我的红宝石代码。我正在使用实例变量@updated的实例方法之一。 Sorbet抛出一个错误-“使用未声明的变量”。我创建了一个初始化方法来声明它。然后将“使用未声明的变量”替换为“必须在initialize内声明实例变量”

sig{returns(<<redacted>>)}
def initialize
  @updated = T.let(Time.now, Time)
  self
end

错误是-

Instance variables must be declared inside `initialize` https://srb.help/5005
    39 |       @updated = T.let(Time.now, Time)

预期-应该不会有任何错误,因为在def initialize中声明了实例变量

编辑:我在Sorbet Playground

中复制了此内容
# typed: strict
class A
  extend T::Sig

  sig {returns(Integer)}
  attr_accessor :x

  sig {params(y: Integer).void}
  def initiazlize(y)
    @x = y
  end

  sig{returns(Integer)}
  def simple_operation
    @x = 5
    @x
  end
end

# -- error
editor.rb:10: Instance variables must be declared inside `initialize` https://srb.help/5005
    10 |    @x = T.let(y, Integer)
            ^^
Errors: 1

1 个答案:

答案 0 :(得分:0)

您似乎输入了initialize方法名称。 fixed example