我见过很多次这样的代码:
...
val aString: String = someFunctionDataReturnsAString()
...
if (someCondition) Some(aString)
else
...
Run Code Online (Sandbox Code Playgroud)
创建新的Optionusing是否正确Some(aString)?aString如果由于某种原因结果is的值怎么办null?if将句子替换为:不太好
if (someCondition) Option(aString)
Run Code Online (Sandbox Code Playgroud)
因为:
val a = Some("hello")
val b: String = null
val c = Some(b)
val d = Option(b)
println(a)
println(c)
println(d)
Run Code Online (Sandbox Code Playgroud)
将在控制台打印:
Some(hello)
Some(null)
None
Run Code Online (Sandbox Code Playgroud)
Option当传递字符串作为参数时,看起来是一个更好的主意,所以如果字符串是will benull的值。OptionNone
我已经看到要审查的代码,我认为对于这样的情况,应该添加一条注释,要求替换Some(aString)为Option(aString).
你是对的。假设您的字符串可以为空,建议使用Option(aString):
def apply[A](x: A): Option[A]一个工厂, 如果参数不是,或者是,
Option则创建。Some(x)nullNonenull
x- 价值返回 -
Some(value)如果value != null,None如果value == null
类Option提到两者都有各自的用例,因此程序员最终决定哪一个更适合他的特定需求:
与偶尔会返回 null 的代码进行交互可以安全地包装在
scala.Option“become”None或scala.Some“其他”中。
就个人而言,由于字符串是不可变的,并且您不能真正拥有未初始化的字符串(因为 Scala 总是要求您初始化它们 - 除非您使用var变量,无论如何这都不是推荐的 Scala 编程方式),所以您很少会这样做实际上在代码中遇到空字符串。
话虽如此,人们仍然可以决定每次都去Option(aString),而且完全没问题。