例如,想要做類似myVal += theAmount
的東西 - 在smalltalk中是否有類似的東西?我找不到任何東西。Smalltalk中有+嗎?還是類似的東西?
3
A
回答
4
是有,但它是一個普通的消息發送,而不是一個特殊的賦值語句。
在佳樂,有例如FloatArray >> + =,這增加了另一個數組的元素到所述接收器的元素:
| f |
f := #(1 2 3) asFloatArray.
f += #(4 5 6).
f
==> a FloatArray(5.0 7.0 9.0)
W¯¯重要的是f在接收到+ =消息之前和之後指的是同一個對象。只有其內容發生變化。你可以用類似的方式爲你自己的類實現+ =。
你無法做的事(*)正在使用+ =替換變量的值,就像其他語言一樣。這只是一個常規的消息發送,接收對象可能會做一些有用的事情。
(*)沒有黑客編譯器。如果你堅持不懈,你可以做任何事情,但總的來說這不是一個好主意。
7
不需要。所有消息發送都會發生,所以無法定義向左側分配新值的操作。只有賦值:=可以做到這一點。
4
理論上可能存在某種黑客行爲。例如,您可以定義類NewNumber
並將其值存儲在value
實例變量中。現在,您可以定義
+= increment
value := value + increment
:)
甚至一元的消息
increment
value := value + 1
將充當++。但是在Numbers中所有的魔法都是在原語的幫助下完成的(VM端的函數可以直接處理內存,可以定義一個原語來修改一個數字的狀態,然後在+ = method中調用它,但是增加新的原語吮吸和當前的風格(在那裏你總是使用一個返回值)是相當不錯的,說實話。
0
這裏
長時間討論它表明instVars不像正常對象:http://computer-programming-forum.com/3-smalltalk/6f56ed2338c3b0fa.htm
插槽Pharo5 +能爲此做些什麼......
相關問題
- 1. Ruby有類似JavaDoc的東西嗎?
- 2. Javascript有類似%d的東西嗎?
- 3. MSVC是否有類似__builtin_va_arg_pack的東西?
- 4. 類似的東西?
- 5. 有任何程序使用.DS_Store(或類似的東西)的東西有用嗎?
- 6. 在C#中fflush()從C中有類似的東西嗎?
- 7. 東西在Java中是(類似)參數
- 8. 我們在JavaScript中有類似C#String.Format(...)的東西嗎?
- 9. 在Android中有「FloatingToggleButton」或類似的東西嗎?
- 10. Java SE(J2SE)在Android中有類似於AIDL的東西嗎?
- 11. 與KleisliFunctor類似的東西是什麼?
- 12. AS3 - 類似arguments.caller的東西?
- 13. c有scanf,python有類似的東西嗎?
- 14. 類似的東西沒有使用JavaScript?
- 15. 除了類,接口或Enum還有別的東西嗎?
- 16. 是否有類似Unity中的Update void的東西?
- 17. 有類似Django的「耙路線」的東西嗎?
- 18. Django是否有類似「數據庫中間件」的東西?
- 19. SQL Server 2008中是否有與Oracle Analytics類似的東西?
- 20. 在Java中是否有類似於WebClient.DownloadString的東西?
- 21. Laravel中是否有任何JAXB類似的東西?
- 22. C#中是否有類似於java.lang.Class的東西?
- 23. Qt中是否有類似.NET Reflector的東西?
- 24. 除了在jQuery中是否有類似的東西?
- 25. Objective-C中是否有類似Java Comparable接口的東西?
- 26. 在C++(或C++ 11)中是否有類似於c#的東西?
- 27. Perl中是否有類似Python Itertools的東西?
- 28. 模型中是否有與application_helper或application_controller類似的東西?
- 29. .Net中是否有類似ConcurrentSet的東西?
- 30. JSF中是否有類似ServletContextListener的東西?
和相關數據的非常好的事情之一是,他們是透明的。您不需要編輯數字的狀態,但可以獲得具有所需狀態更改的新數字。 –