关于nil的理解,调用nil point值方法报错问题
来源:4-1 结构体和方法

慕工程3002471
2019-07-21
老师,关于go允许调用nil指针的方法的问题;上面是和老师一样的代码,我尝试运行如下代码
var nilNode *treeNode nilNode.setValue(900) nilNode.print()
'Node is nil, ignored'被打印了,但是print函数在runtime时报错了:
panic: runtime error: invalid memory address or nil pointer dereference
如果我加上23-25的代码 编译器又不过说nil不能转为treeNode值。
而如果我如下这样判断的话,编译器过了,runtime还是报nil pointer的错
if &node == nil { return }
我想我对nil的理解和判断有问题,按照这个设计的话,函数接受者默认是可能为nil的,所以在runtime可以报错,那么在所有方法里都要做nil check?
而既然编译器允许调用nil.print()的值方法,如何在print方法内做检测呢?
看似不能直接理解为Swift里的nil和optional
写回答
1回答
-
慕工程2383720
2019-07-21
一个是对象调用,一个是指针调用。
对象调用,对象可以通过指针找到对象。指针调用,其根本上,就是通过寻址到对象,然后进行调用。
其本质上,都是对象调用。
明确这个之后,我们再看下你的问题。
对象调用,nil指针指向的是nil,而如果是直接把nil当成对象,进行调用,估计编译期间都过不了。
因为编译器会对对象内存,进行检测。
你在对象调用里进行判空,会变得毫无意义。00
相似问题