我无法理解Option[T]
Scala中的课程要点.我的意思是,我不能看到任何advanages None
了null
.
例如,考虑代码:
object Main{
class Person(name: String, var age: int){
def display = println(name+" "+age)
}
def getPerson1: Person = {
// returns a Person instance or null
}
def getPerson2: Option[Person] = {
// returns either Some[Person] or None
}
def main(argv: Array[String]): Unit = {
val p = getPerson1
if (p!=null) p.display
getPerson2 match{
case Some(person) => person.display
case None => /* Do nothing */
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在假设,该方法getPerson1
返回null …
如何在ruby中建模可选值?Scala有Option [],这是我在ruby中寻找的东西.
我正在阅读一些Clojure代码,其中包含一堆未初始化的值,就像nil
传入的记录中的数值一样.
现在很多Clojure图书馆都认为这是惯用语.这意味着它是一个公认的惯例.
但它也导致了NullPointerException
,因为并非所有Clojure核心功能都可以处理nil
输入.(也不应该).
其他语言具有Maybe
或者Option
在其为空时代理该值的概念,作为NullPointerException
降低风险的方式.这在Clojure中是可能的 - 但不是很常见.
你可以做一些技巧,fnil
但它并不能解决所有问题.
另一种方法是简单地将未初始化的值设置为符号,:empty-value
以强制用户在所有处理代码中显式处理此场景.但这并不是一个很大的提升nil
- 因为在运行时之前你并没有真正发现所有场景(在其他人的代码中).
我的问题是:在Clojure中是否存在一种惯用的替代品?