我一直听到人们谈论非可空引用类型将如何解决如此多的错误并使编程变得更加容易.即使是null的创建者也称它为十亿美元的错误,而Spec#引入了非可空类型来解决这个问题.
编辑:忽略我对Spec#的评论.我误解了它是如何工作的.
编辑2:我必须和错误的人交谈,我真的希望有人能够与之争辩:-)
所以我猜想,在少数人中,我错了,但我不明白为什么这场辩论有任何优点.我认为null是一个bug查找工具.考虑以下:
class Class { ... }
void main() {
Class c = nullptr;
// ... ... ... code ...
for(int i = 0; i < c.count; ++i) { ... }
}
Run Code Online (Sandbox Code Playgroud)
BAM!访问冲突.有人忘了初始化c.
现在考虑一下:
class Class { ... }
void main() {
Class c = new Class(); // set to new Class() by default
// ... ... ... code ...
for(int i = 0; i < c.count; ++i) { ... …Run Code Online (Sandbox Code Playgroud) 我正在阅读"Professional F#2.0"一书.作者展示了以下代码
let a string : option = None
if a.IsNone then
System.Console.WriteLine("a is none")
else
System.Console.WriteLine("a is some");;
Run Code Online (Sandbox Code Playgroud)
然后说
"这使得Option的使用远远优于null的使用,并且在很大程度上消除了在运行时抛出的重要异常源"
好.所以我写
System.Console.WriteLine(a.GetType());;
Run Code Online (Sandbox Code Playgroud)
我明白了
System.NullReferenceException:未将对象引用设置为对象的实例.at System.Object.GetType()at.$ FSI_0008.main @()由于错误而停止
我就像'un !!!'
真的是怎么做的
if a.isSome then
do bla bla
any different from
if a != null then
do bla bla
Run Code Online (Sandbox Code Playgroud)
所以我不知道程序员是如何从NullPointers中保存的
PS:NullPointerException过去给我带来了很多悲伤.
给定一个功能:
min(A, B) when A =< B -> A;
min(_A, B) -> B.
Run Code Online (Sandbox Code Playgroud)
我可以在函数foldl中以与此类似的方式使用它:
lists:foldl(fun min/2, 0, [1,2,3,4,5,6,7,8,9,10])
Run Code Online (Sandbox Code Playgroud)
我认为这是不可能的,因为我必须设置一个初始值,该值将与列表的其余部分进行比较,例如,我没有想到的身份函数.我对吗?
语法是用Erlang编写的,但对于非Erlang程序员来说也应该是可读的.
erlang functional-programming list fold higher-order-functions
我正在用许多不同的语言编写一个键值存储API(如ODBC,只是接口,而不是底层存储),虽然我不想在语言之间音译API,但我不希望例如从Java存储值作为"null",然后用另一种不支持null概念的语言读取它.我不确定我是否这么好解释,但它是我第一次尝试:)
见:
关于键值存储API的讨论
以下歧视联盟未能编译:
type Expression =
| Identifier of string
| Integer of int
| Assignment of Identifier * Expression
Run Code Online (Sandbox Code Playgroud)
显示的错误是
The type "Identifier" is not defined.
Run Code Online (Sandbox Code Playgroud)
关于最后一个工会案件.
我尝试Expression使用rec属性进行标记,但这似乎无济于事.
有解决办法吗?更好的是,引用我的麻烦的原因是什么?
我正在冻结f#的选项类型.我有3本书,尽我所能,但我没有得到它们.
有人有一个清晰简洁的解释,也许是一个现实世界的例子吗?
TIA
加里
f# ×3
null ×2
.net ×1
api ×1
d ×1
erlang ×1
fold ×1
list ×1
non-nullable ×1
null-pointer ×1
type-systems ×1
types ×1