请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于nil的理解,调用nil point值方法报错问题

https://img1.sycdn.imooc.com//szimg/5d3405810847443b05460268.jpg

老师,关于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

正在回答 回答被采纳积分+3

1回答

慕工程2383720 2019-07-21 23:44:24

一个是对象调用,一个是指针调用。
对象调用,对象可以通过指针找到对象。指针调用,其根本上,就是通过寻址到对象,然后进行调用。
其本质上,都是对象调用。
明确这个之后,我们再看下你的问题。
对象调用,nil指针指向的是nil,而如果是直接把nil当成对象,进行调用,估计编译期间都过不了。
因为编译器会对对象内存,进行检测。
你在对象调用里进行判空,会变得毫无意义。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信