美文网首页
Scala和Python中的None

Scala和Python中的None

作者: 飞有飞言 | 来源:发表于2020-11-30 15:19 被阅读0次

    总览

    Python中的None

    java,c,c++,SQL等多数语言中都有一个null的概念,表示指针指向一个空地址。java没有地址一说,java中的null是没有分配指向的对象之意。
    python中的None也就相当于其他语言中的null,表示一个对象指向了一个空地址。
    python秉承一切皆对象的概念,所以None也是对象。它的类型是

    type(None) == NoneType
    

    NoneType唯一的一个实例就是None

    对于没有return的方法,或者什么也不return的方法,返回值就是None,例如

    def f():
        pass
    def g():
        return
    

    这两个方法的返回值都是None
    python中对一个变量是不是None一般使用is关键字来判断(也可用==)

    a = f()
    if a is None: # a == None
        print('a is None')
    

    scala 中的None

    scala兼容于java,所以java中的null照样移植到了scala中(但是含义稍有不同)。但None在scala中并不是null。
    scala中的None其实是Option类的一个实例

    先来看Option类是什么。Option类是一个容器类,也就是放其他对象的一个容器。Option中元素的类型用泛型定义Option[+A], 为什么要有一个加号,后面介绍。
    Option它的含义是说,要么有一个元素,要么没有。

    1. 有一个元素,使用Some来表示, 例如,Some(1)表示含有一个整形元素1的Option
    2. 没有元素,使用None来表示

    None一般使用在模式匹配中,判断一个Option类型的对象是否有值。例如

    xs.headOption match {
      case Some(x) => println(s"xs first value is $x")
      case None => println("xs is empty")
    }
    

    None是所有Option类型的子类,这一点可以从Option的定义看到
    abstract class Option[+A]
    而None的定义是
    case object None extends Option[Nothing]
    因为在scala中,Nothing是所有其他类的子类,而且Option支持协变,那么Option[Nothing]就是所有Option[+A]的子类了。 也就是说None的类型可以在任何需要Option类型的地方。

    总结

    本文讲了Scala和Python中的None的不同,并且从代码层面讲解了scala中的None的某些特点。

    相关文章

      网友评论

          本文标题:Scala和Python中的None

          本文链接:https://www.haomeiwen.com/subject/jqdziktx.html