什麼是Java的靜態字段和方法的Smalltalk等價物? IOW,Smalltalkers在需要課堂級數據和/或方法時會做什麼?什麼是Java靜態的Smalltalk等價物?
回答
我們使用類方法/實例變量。畢竟,一個類是一個對象,所以可以有方法。
例如,矩形類有一個方法#origin:角落:所以你可能會寫
Rectangle origin: [email protected] corner: [email protected]
創建一個矩形。這只是#origin:corner:發送到名爲Rectangle的對象(一個類是一個對象!),兩個Points作爲參數。
類端實例變量的工作方式大致相同。作爲對象的類可能有實例變量。從蘇尼特庫:
TestCase class
instanceVariableNames: 'history'
然後TestCase類暴露按通常的方式,用一個getter/setter方法(#history和#history :)。
編輯:我用的@
引起了一些討論。這就是所謂的binary message,它允許一個定義選擇器,看看其他語言將稱爲中綴操作符。例如,3 + 4
或。在@
的情況下,Number
類定義了一個名爲@
的方法,其參數爲y
,定義爲^Point x: self y: y
- 「返回x座標爲我自己的值並且其y座標爲參數的點」。
點是有序對,但當然沒有什麼能阻止定義更高維的版本。 Point
可能會定義一個名爲@
的方法,如下所示:^Triple x: self x y: self y z: z
- 「返回R^3中的一個點,其中x,y座標是我自己的,並且其z座標是給定的參數」。
在大多數類型的Smalltalk中,您都有類變量。通常,類變量用於例如singletons。儘管你可以在Smalltalk之間使用不同類型的變量,但請閱讀關於此特定實現的文檔。
如果您是來自Java或Smalltalk的Smalltalk,那麼最重要的思想轉變就是類是對象。
類似Java的語言中的靜態可以有許多不同的語義。通常這與可見度有關。您需要一個獨立於類的任何實例的對象,但您希望將此對象的可見性限制在類內,即:僅在類的實例或類本身中可見(在Smalltalk中,因爲在Java中類不是一流的對象)。
在Smalltalk中你通常有這個更多的選擇:
- 類的實例變量
一個類的實例變量確實就像任何類的實例的實例變量一樣:類具有此屬性,並且可以通過在類上提供getter方法(不在實例上,我們稱之爲類方法)來使該類的任何實例都可以訪問該屬性, 。如果您有默認值等,這很有用。例如:
定義一個類Car
,與實例變量colour
,PLUS一個類的實例變量defaultColour
(這當然將具有值「BLACK」 ;-))
Smalltalk defineClass: #Car
superclass: #{Core.Object}
indexedType: #none
private: false
instanceVariableNames: 'colour '
classInstanceVariableNames: 'defaultColour'
imports: ''
category: ''
這是一類定義(實際上是VisualWorks Smalltalk中的對象Smalltalk
的消息)。 如果您創建Car
的子類,它將繼承類實例變量defaultColour
,因爲普通對象也可以。如果defaultColour
類的實例變量有一個值,那麼子類也會繼承這個值!
- 1. 什麼是Java的靜態塊的Scala等價物?
- 2. Java中靜態{...}的c#等價物是什麼?
- 3. 什麼是Clojure注入的等價物:into:在Smalltalk中?
- 4. 什麼是InterruptedException(Java)的.NET等價物?
- 5. 什麼是Java Stream.collect的Kotlin等價物?
- 6. 什麼是ASP.NET Membership的Java等價物?
- 7. 什麼是Java Socket.getInetAddress()的C#等價物?
- 8. 什麼是.NET TypeCode的Java等價物?
- 9. 什麼是Java DecimalFormat的c#等價物?
- 10. 什麼是Debugger.Launch()的Java等價物?
- 11. 什麼是PHP flush()的Java等價物?
- 12. 什麼是Java的動態代理的.Net等價物?
- 13. 什麼是Python的os.walk的等價物?
- 14. 什麼是PHP的preg_quote的等價物?
- 15. MessageFormat的Pattern.quote()的等價物是什麼?
- 16. 什麼是其他語言中的靜態變量的PHP等價物?
- 17. 什麼是在VB.net中的私有靜態只讀字段的等價物?
- 18. 什麼是Win32_OperatingSystem的64位等價物?
- 19. 什麼是VC7中的strtok_s等價物?
- 20. java.time.Duration的Android等價物是什麼?
- 21. 什麼是「hasOwnProperty()」接口的等價物?
- 22. 什麼是JQuery .load()的YUI等價物?
- 23. InputBindings的WinRT等價物是什麼?
- 24. 什麼是Silverlight中的OnRender等價物?
- 25. C#中TreeBidiMap的等價物是什麼?
- 26. 什麼是mac的win32等價物?
- 27. 什麼是C#中的vbNullChar等價物?
- 28. 什麼是ChrW(e.KeyCode)的C#等價物?
- 29. 什麼是request.getRemoteUser()的JSP EL等價物?
- 30. 什麼是JMX的.NET等價物?
不值得一個「正式」的答案,但我偶然發現這個網頁可能會幫助你:http://per.bothner.com/papers/smalltalk.html。 – 2010-06-23 14:03:37
我建議把你的第二個問題分解爲一個_separate_問題。 – 2010-06-23 14:32:14
@Frank:很好。正如你所說。 – Jim 2010-06-23 14:36:20