回答
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