Q
多種方法調用
0
A
回答
3
2
您呼叫的方法不影響調用對象。 name.reverse將返回一個新的字符串,並保留原文。你想要做的是在你打電話後重新分配姓名。
name = George
name = name.reverse.upcase
在這種爆炸方法中存在一個問題,以!通常會修改正在操作的對象。所以你可以做下面的事情:
name = George
name.reverse!.upcase!
一般來說,我會避免!方法,除非你有充分的理由。設置「name =」的第一個例子非常清晰,易於閱讀且毫不含糊。
+0
謝謝,我可以看到我現在做錯了什麼! – Chris
0
或許,這將有助於解釋發生了什麼:
name = "George" # => "George"
name.object_id # => 70228500576040
object_id
是實際變量的內存引用,換句話說,它生活的地方作爲腳本運行。
reversed_name = name.reverse # => "egroeG"
reversed_name.object_id # => 70228500574980
我們可以告訴大家,reverse
創造了一個新的變量,因爲object_id
是從的name
不同。
upcased_reversed_name = reversed_name.upcase! # => "EGROEG"
upcased_reversed_name.object_id # => 70228500574980
upcase!
的方法修改的同一變量作爲reversed_name
。
如果我們使用upcase
代替,因爲變量的新版本中創建object_id
變化:
upcased_reversed_name = reversed_name.upcase # => "EGROEG"
upcased_reversed_name.object_id # => 70228500572960
upcased_reversed_name # => "EGROEG"
簡短的教訓是!
方法的結果,因爲它作用於你不能分配給一個變量原始變量並將其更改。
相關問題
- 1. Java多種方法調用
- 2. 用多種方法調度隊列? iPhone
- 3. 調用WCF服務的多種方法
- 4. 調用多種方法關閉
- 5. 異步調用多種方法
- 6. asyn示例調用多種方法
- 7. Android調用多種方法1 by 1
- 8. 多種方法
- 9. 以另一種方法調用方法?
- 10. 一種方法調用方法一次
- 11. 另一種方法調用方法?
- 12. 插件回調的多種方法
- 13. 多種方法的流星模式調用順序回調
- 14. 在調用第一種方法時觸發第二種方法的調用
- 15. 一種方法調用字符串的另一種方法
- 16. 另一種方法不能調用,而其他方法調用
- 17. 調用另一種方法時調用的方法
- 18. 使用Mockito調用多種其他方法的方法的單元測試
- 19. 對多種方法使用調用不同量的參數
- 20. 使用另一種方法調用URLconnection
- 21. 使用接口調用2種方法
- 22. 幾種調用「使用」的方法?
- 23. 哪種方法可以在c#timer或thread中重複調用多個方法?
- 24. 調用本地服務的多種方法
- 25. WCF服務多種方法調用一個AJAX請求
- 26. 在CSV對象上調用多種方法
- 27. 如何驗證多種方法不同PARAMS調用
- 28. 你可以在一條線上調用多種方法嗎?
- 29. 調用一次函數的多種方法
- 30. 管理跨多種方法和網絡調用的交易
是的,你可以做到這一點。在紅寶石裏,一切都是一個對象。 name是一個String對象,你做的第一個調用是'name.reverse'。這也返回一個String對象。這個對象也理解'upcase'等方法。 – hotfix
你試圖做什麼? – sawa
它不會返回原始名稱。它返回'nil'。 – sawa