我没有在ML中做过任何编程,但我正在学习函数式编程。毫无疑问,ML的类型通常很特别,但我想知道是否可以进行类型转换来解决严格的类型限制?如果你不能,那是因为ML想要减少不正确类型的机会,还是它没有被实现?你可以在ML中进行类型转换吗?
回答
“类型铸造”可能意味着很多不同的东西。至少有3种完全不同的用例:
在特定不同类型(例如数字类型)之间转换。 ML可以通过各自的功能实现,它们只是不会伪装成“casts”
从顶部类型(如
Object
或void*
)往返铸造。这只是一种破解压制类型系统的方法。幸运的是,ML具有适当的参数多态性和代数数据类型,所以通常不需要这样做。做了令人讨厌的低级别诡计,彻底颠覆了类型系统。 ML通常不支持它,因为它被设计成一种安全的高级语言。
什么形式的铸造你特别感兴趣,为什么?
感谢您的回答。我在谈论第一个要点。我从来没有真正想到第二个子弹类型铸造。我很感兴趣,因为我看到你可以在ML中有[1,2,3]这样的东西,但是你不可能有[1,[1,2],3](对不起,如果语法关闭),因为所有第二个列表的元素不是相同的类型。所以,我想了一个像[1,2.0,3]这样的例子。从技术上讲,这是行不通的,但演员可以轻松解决这个问题。 – JustBlossom
@ LearnLanguages96您的示例与ML无法区分;都失败了,因为列表中的第二个项目与第一个示例中的第一个项目具有不同的类型,它是一个“int list”,在第二个项目中它是“真实”的,但是重要的是它们不匹配。 SML太漂亮了,不能在标准中允许这样的事情,但是有特定于实现的转换,例如[在SML/NJ中的Unsafe结构中](http://www.smlnj.org/doc/SMLofNJ/pages/ unsafe.html)或[MLton中的MLtonStructure](http://mlton.org/MLtonStructure)。 –
@ LearnLanguages96,你的例子是关于第二点。这就是通常使用代数数据类型的原因。我假设你的例子应该描述一棵树,所以你可以定义'datatype'树'L' B'列表'并写入'B [L 1,B [L 1,L 2],L 3]'。或者如果你真的想要一个异构列表,那么你也可以使用数据类型:'datatype item = N of int | S的字符串| b bool val xs = [N 5,B true,S“boo”,N 6]'。幸运的是,后一种情况在实践中很少需要。 –
- 1. 你可以在PHP中强制类型转换吗?
- 2. 我们可以使用工会进行类型转换吗?
- 3. 在Swift中可以为你的类类型创建隐式转换吗?
- 4. 你如何在红宝石阵列中进行类型转换?
- 5. Flask-SQLAlchemy-你可以在模型中进行查询吗?
- 6. 你可以在已经转换的PDF中插入空行吗?
- 7. 你可以将其转换为VB吗?
- 8. 你可以将Model转换为ModelAndView吗?
- 9. 在SML中进行类型转换
- 10. 在MIPS中进行类型转换
- 11. 在C++中进行类型转换
- 12. 在Matlab中进行类型转换
- 13. 在Groovy中进行类型转换
- 14. 在C中进行类型转换#
- 15. 是否可以在纯JPA中进行类型转换(从布尔型到yes_no)?
- 16. 你可以在GridView中缩进吗?
- 17. 可以将`Either`类型转换为`Task`类型吗?
- 18. 可以在状态机中进行状态转换吗?
- 19. 我可以直接在html页面中进行XSLT转换吗?
- 20. 我可以在iOS中使用CIImageAccumulator进行滑动转换吗?
- 21. 如何将ML VectorUDT功能从.mllib转换为.ml类型
- 22. 是否可以对std :: min()进行类型转换?
- 23. 是否可以对一个const变量进行类型转换?
- 24. 你可以在Access中进行行锁定吗?
- 25. 你可以在PHP中嵌套类吗?
- 26. 可以在Switch语句中进行类型声明吗?
- 27. 你可以在int变量中存储/转换int值吗?
- 28. 可以在换行符后缩进吗?
- 29. 使用泛型进行类型转换
- 30. 你可以在Linux中运行Xcode吗?
有关ML的一切都是故意的。 :) –