是否有可能获得在宏中使用的方法调用的推断返回类型?

时间:2018-01-31 22:11:51

标签: return-type crystal-lang

如果没有声明方法的返回类型,是否仍然可以获得在宏中使用的推断返回类型?

class Record
  def explicit : String
     "name"
  end
  def inferred
    ["a", "b"]
  end
end
# The following works:
puts {{Record.methods.find { |m| m.name.id == "explicit".id }.return_type }}

# The following does not (because .return_type
# is useful when the method explicitly states the return type):
puts {{Record.methods.find { |m| m.name.id == "inferred".id }.return_type }}

1 个答案:

答案 0 :(得分:3)

不,宏在任何类型推断完成之前运行,并且无法从宏访问推断类型。这是因为在类型检查器可以正确推断返回类型之前,必须完全展开宏。