【发布时间】:2021-05-07 21:27:09
【问题描述】:
为什么我可以在 Crystal 中定义这样的方法:
def foo(bar): String
bar.to_json
end
foo({"x" => 1, "y" => 2})
但这种类型推断不适用于类:
class Foo
def initialize(bar)
@bar = bar
end
def foo: String
@bar.to_json
end
end
Foo.new({"x" => 1, "y" => 2}).foo
结果是
Error: can't infer the type of instance variable '@bar' of Foo
关于 Crystal 的类型推断,我缺少什么以及解决方法是什么?
【问题讨论】:
-
你可能需要在某个地方初始化一个 Foo (
Foo.new(xxx)),这样它就可以知道@bar 最终会是什么......也许它不像类变量那样聪明使用方法(如果没有人调用它们,它会忽略)? -
@rogerdpack 不,这也行不通。
-
@rogerdpack 如果是这样,我将非常感谢知道这种情况下的解决方法是什么,换句话说,我如何接受在构造函数中具有方法
to_json: String的任何类型?
标签: crystal-lang