回答
PHP和Scala是如此不同以至于没有直接的等价物。首先,Scala提倡不变的变量(Java世界中的final
),所以通常我们会争取始终设置的变量。
您可以检查null
:
var person: Person = null
//...
if(person == null) {//not set
//...
}
person = new Person()
if(person == null) {//set
//...
}
但它是一个贫穷的做法。最习惯的方法是使用Option
:
var person: Option[Person] = None
//...
if(person.isDefined) {//not set
//...
}
person = Some(new Person())
if(person.isDefined) {//set
//...
}
同样,使用isDefined
不是最惯用的方式。考虑map
和模式匹配。
首先,在斯卡拉Array
没有钥匙。他们有指数,所有指数都有价值。不过,请参阅下面的编辑,了解这些值如何初始化。
你可能是指Map
,它有键。您可以通过使用isDefinedAt
或contains
检查按键是否存在(和,因此,一个值):
map isDefinedAt key
map contains key
有两个之间没有实际区别。现在,您在编辑中看到Scala倾向于使用Option
,并且在处理地图时只有这样一种方法。如果你这样做:
map get key
,您会收到Option
回来了,这将是None
如果密钥(因此,值)不存在。
编辑
这是原来的答案。我现在已经注意到这个问题并不完全是这个问题。实际上,JVM上的所有字段都是由JVM本身预先初始化的,这将它归零。在实践中,所有参考字段最终指向null
,布尔值被初始化为false
,并且所有其他基元都以它们的零版本进行初始化。
Scala中没有这样的事物作为“未定义”字段 - 你甚至不能写这样的东西。您可以编写var x: Type = _
,但这只会导致JVM初始化值。您可以使用null
来代表未初始化的地方,但它的惯用Scala代码试图避免这样做。
指示值不存在的可能性的常用方法是使用Option
。如果你有一个价值,那么你得到Some(value)
。如果你不这样做,你会得到None
。查看其他堆栈溢出问题,关于使用Option
的各种方法,因为您在惯用代码中没有像variable.isDefined
那样使用它(虽然这很有效)。
最后,请注意,惯用的Scala代码不会使用var
多,宁愿使用val
。这意味着你不会设置任何东西,而是生成一个新值,并将该值设置为其他值。
- 1. Scala中无等价物
- 2. .NET的Task.Factory.StartNew的Scala等价物?
- 3. Scala中IEnumerable LINQ等价物的图表?
- 4. 在Scala中有getch()的等价物吗?
- 5. 什么是C++ typeid的Scala等价物?
- 6. php的Javascript等价物move_uploaded_file
- 7. PHP的等价物str_word_count?
- 8. PHP的mysql等价物mysql_real_escape_string()
- 9. PHP的等价物Mcrypt
- 10. PHP basename Twig等价物
- 11. Python的等价物@
- 12. Python的等价物的PHP的虚拟()
- 13. MySQL的UNIX_TIMESTAMP()的PHP等价物?
- 14. 什么是PHP的preg_quote的等价物?
- 15. Python的等价物的php包
- 16. 在PHP中的quadraticCurveTo的等价物
- 17. Ruby的等价物的php史努比
- 18. PHP的get_file_contents()的Perl等价物?
- 19. PHP中的ASP.NET HttpModules的等价物
- 20. os.getpardir()的等价物?
- 21. document.getElementsByClassName的等价物
- 22. 什么是PHP var_dump的.NET等价物?
- 23. PHP-CLI中的$ _ENV ['APACHE_RUN_USER']等价物
- 24. 什么是perl中$ _的php等价物?
- 25. 寻找getElementById和innerHTML的PHP等价物
- 26. PHP父::对象的等价物
- 27. PHP的ArrayObject是否有in_array等价物?
- 28. 什么是PHP $ _ENV的Ruby等价物?
- 29. PHP的等价物.hasNext()和.hasNextLine()?
- 30. PHP的标题等价物包括
我该如何做“地图”和模式匹配? – user1435853
@ user1435853:参见http://www.scala-lang.org/api/current/scala/Option.html和http://dibblego.wordpress.com/2008/01/16/scalaoption-cheat-sheet/ –
该类型将写入'Option [Person]'(方括号),而不是'Option(Person)'。 – Madoc