【发布时间】:2016-01-12 05:31:49
【问题描述】:
我对这些条款感到困惑。据我了解,强制是当语言转换变量类型和重载时,当语言将相同的符号用于多个目的时。
【问题讨论】:
我对这些条款感到困惑。据我了解,强制是当语言转换变量类型和重载时,当语言将相同的符号用于多个目的时。
【问题讨论】:
让我们暂时将计算机语言比作面包店:当bake 函数重载时,您可以有许多不同的烤箱(实现),一个用于面包,一个用于披萨等。通过强制,你只需要一个烤箱,但对于一些你想烤的东西,你需要一个小工具(“强制功能”)来让它适合那个烤箱。
因此,重载有多个实现(烤箱)由参数类型(食物)决定,强制转换有多个强制函数(小工具)从每个参数类型(食物)到一个单一类型(烤箱需要的那个) )
无论您有很多小工具,还是很多烤箱,它们都应该由食物类型唯一确定。例如,当您有一个用于意大利食物的烤箱和另一个用于包含西红柿的食物时,您会遇到问题:比萨饼怎么办?这就是例如Haskell 程序员称为“重叠类型类”。有时可以解决,例如如果一个烤箱比另一个烤箱更专业(一个用于意大利食品,另一个用于托斯卡纳食品)
【讨论】:
从一个非常普遍的角度来看,主要区别在于 重载 是显式的(由程序员控制),而 类型强制 是隐式的(由编译器控制) )。
【讨论】: