例如,想要做类似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的东西?
和相关数据的非常好的事情之一是,他们是透明的。您不需要编辑数字的状态,但可以获得具有所需状态更改的新数字。 –