gpt4 book ai didi

crystal-lang - 为什么 Crystal 无法推断实例变量的类型?

转载 作者:行者123 更新时间:2023-12-04 13:07:27 24 4
gpt4 key购买 nike

为什么此代码对实例变量失败?

a = 4.days # Works
class A
@a = 4.days # Fails
end
附言
future 有没有改进的计划?似乎是很普通也很有用的东西。

最佳答案

@a = 4将作为 4 工作是 literal ,但是 4.days是一个表达式,因此不能自动推导出。出于同样的原因 @a = 1 + 1 also requires explicit types ,即使 @a = 2不会。
关于 future 的计划,有趣的是该功能存在,但被有意删除。
简而言之,原因是保持编译步骤简单。自动引入类型很优雅,但也有缺点:

  • 编译较慢
  • 为错误类型的程序生成好的错误消息变得困难
  • 重用以前编译的结果变得困难(或不可能?)

  • 原因是,通常,您必须分析整个源代码中的函数调用链。请注意,并非所有表达式都像 1 + 1 一样简单.偶 4.days已经有些复杂了,因为编译器需要推导出 days 的返回类型方法调用。
    如果您想了解有关设计决策的更多信息,我建议您阅读 discussion from 2015 .
    你可能会问,为什么它适用于课外的第一个作业?我认为在这种情况下,上下文更加本地化。因此,反对允许它的论据并不完全适用。例如,如果您更改函数内部的语句,其效果不像更改类的布局那样具有全局性。
    再次,这是一种权衡。但是这两种情况下的强制类型都会彻底改变体验。虽然在类的上下文中影响相当小,但强制任何赋值的显式类型会将“类似 Ruby”的 Crystal 语言变成传统的类型化语言,其中每个赋值都需要显式键入。

    关于crystal-lang - 为什么 Crystal 无法推断实例变量的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68750438/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com