2017-01-19 2 views
4

Ein bisschen Dokumentation für Anfänger schreiben und ich bin gegen ein Problem gekommen. Zu wissen, was binäre Nachrichten bedeuten, bedeutet nicht, dass Sie wissen, wie sie heißen!Weniger bekannte Smalltalk-Binärnachrichten und ihre Bedeutung?

Einige offensichtlichen und ihre jeweiligen Klassen:

- "minus" TraitComposition Collection Point Interval BoxedFloat64 Color LargeInteger ScaledDecimal Integer Exception DateAndTime Number TraitExclusion SmallInteger TraitTransformation TComposingDescription WordArray Fraction ExceptionSetWithExclusions ExceptionSet FloatArray SmallFloat64 Duration TraitDescription Timespan TraitAlias 

    / "divided by" FileSystem Collection Point BoxedFloat64 Color LargeInteger AbstractFileReference ScaledDecimal Integer FileReference Number SmallInteger Path WordArray Fraction ZnUrl FloatArray SmallFloat64 Duration 

    + "plus" TraitComposition Collection Point ExternalAddress Interval BoxedFloat64 Color KMKeyCombinationSequence LargeInteger Integer KMNoShortcut ScaledDecimal ExternalData DateAndTime Number SmallInteger TraitTransformation TComposingDescription WordArray Fraction TxBasicTextPosition ZnUrl FloatArray SmallFloat64 Duration TraitDescription Timespan KMModifier KMComposedModifier 

    <= "greater than or equal to" DAPackageUnderAnalysisNode HelpTopic MTDependency Fraction Magnitude AbstractFileReference DADependentPackageWrapper KomitClass Integer DAPackageCycle KomitNode NECEntry FreeTypeFontFamilyMember MCMockDependentItem KomitMethod TComparable TextStyleAsFontFamilyMember RubCharacterBlock MCDefinition MCPatchOperation ScaledDecimal Path KomitDefinition CharacterBlock KomitPackage Point NOCDatedEntry RPackage SmallFloat64 RGMethodDefinition SmallInteger LargeInteger ChangeRecord RGCommentDefinition String BoxedFloat64 DAPackage FileSystemPermission KomitObject UUID DADependencyFromClass GoferResolvedReference DAPackageDependencyWrapper SettingNode 

    < "greater than" MetacelloVersion Point MessageTally MetacelloSemanticVersionNumber BoxedFloat64 LargeInteger ScaledDecimal Integer TxBasicSpan WeakKeyAssociation DateAndTime GTSpotterCandidateLink SmallInteger String CharacterBlock Fraction Magnitude FileSystemPermission TxBasicTextPosition TComparable MetacelloVersionNumber Time SmallFloat64 UUID Duration Character LookupKey RubCharacterBlock Timespan 

    = "is equal to" We all know this one... 

    * "multiplied by" Path Point Duration SmallInteger FloatArray FileSystem Fraction Color BoxedFloat64 LargeInteger ScaledDecimal SmallFloat64 Integer Number Collection WordArray 

    > "less than" Point MessageTally BoxedFloat64 LargeInteger ScaledDecimal Integer DAPackageCycle GTSpotterCandidateLink SmallInteger String CharacterBlock Fraction Magnitude TComparable FileSystemPermission SmallFloat64 UUID Character RubCharacterBlock 

    >= "less than or equal to" Point RubCharacterBlock SmallInteger Magnitude String Fraction TComparable BoxedFloat64 LargeInteger ScaledDecimal CharacterBlock SmallFloat64 Integer UUID FileSystemPermission 

    , "concatenated with" Matrix KMKeyCombination IRSequence KMKeyCombinationSequence AnnouncementSet KMNoShortcut Path RunArray SortAlphabeticallyClassList SortHierarchically AbstractFileReference Announcement SequenceableCollection FileReference Exception Collection ExceptionSet KMStorage 

Weniger offensichtlich sind:

*= FloatArray 

\\= FloatArray 

** Number 

// Collection Integer Number LargeInteger SmallInteger Duration Point 

-= FloatArray 

| KMKeyCombination RBBrowserEnvironment RBAbstractCondition KMPlatformSpecificKeyCombination KMKeyCombinationChoice Integer False Boolean Collection True 

~= SmallFloat64 SmallInteger Object BoxedFloat64 

==> Boolean 

-> Object 

~> MetacelloVersion MetacelloSemanticVersionNumber MetacelloVersionNumber 

>> Behavior TBehavior Integer TraitBehavior 

-- TxBasicTextPosition 

>-------> SHParserST80Test 

\ Collection 

== ProtoObject 

\\\ Integer LargeInteger 

% Number 

~~ ProtoObject 

& Collection RBBrowserEnvironment Integer ZnUrl RBAbstractCondition False Boolean True 

,, Matrix 

+= ThirtyTwoBitRegister FloatArray 

<< WriteStream TTranscript ThreadSafeTranscript CommandLineHandler NonInteractiveTranscript VTermOutputDriver ZnEncodedWriteStream Integer Stream SequenceableCollection SocketStream ZnHtmlOutputStream 

=> FLSqueakPlatform Symbol 

+* Matrix Array 

/= FloatArray 

\\ Collection Number LargeInteger SmallInteger Duration Point 

? ZnUrl 

@ "returns a point?" TraitTransformation TComposingDescription TraitDescription Number TraitComposition SequenceableCollection TraitAlias 
+0

Einige Ihrer Entscheidungen für das, was weniger offensichtlich ist, scheinen mir willkürlich. Insbesondere einige der üblichen mathematischen/logischen, die in einem weiten Bereich anderer Sprachen zu finden sind (&, |,%, //, **) –

Antwort

3
>> Behavior TBehavior Integer TraitBehavior 

ist in dem Sinne nicht wirklich binär, dass seine Argumente nicht von der gleichen sind Art. Er projiziert ein Verfahren aus dem Verhalten (Empfänger), mit dem Symbol mit dem Namen (Argument)

-- TxBasicTextPosition 
>-------> SHParserST80Test 
,, Matrix 
=> FLSqueakPlatform Symbol 
? ZnUrl 

sie vergessen, zu spezifisch diesen Klassen

== ProtoObject 

Identität comparation, it was discussed in a recent question

~~ ProtoObject 

Es ist die Negation von ==

% Number 

Modulo-Operator (der Rest einer ganzzahligen Division)

& Collection RBBrowserEnvironment Integer ZnUrl RBAbstractCondition False Boolean True 

Es ist das und Operator für booleans, bitweise binäre und für ganze Zahlen, aber für Sammlungen hat eine verschiedene Bedeutung

+= ThirtyTwoBitRegister FloatArray 
/= FloatArray 

Sie sind wie die C-Operatoren, die den Empfänger modifizieren, anstatt ein neues Float-Array zu erzeugen

\\ Collection Number LargeInteger SmallInteger Duration Point 

für Beträge, es ist der Rest der Ganzzahl-Division. Es hat eine andere Bedeutung für Sammlungen.

@ "returns a point?" 

nur für numbres, es hat verschiedene Bedeutungen auf andere Klassen

ich diejenigen weggelassen, die ich weiß nicht, von Herz

+1

Ich denke, >> sehr viel ist binär. Smalltalk definiert einen "binären Selektor" als einen aus Infix-Zeichen, einem Empfänger und einem einzelnen Argument zusammengesetzten (1 + 1 = 2, d. H. Binär) UND, am wichtigsten, auf der Vorrangstufe zwischen unären Selektoren und Schlüsselwort-Selektoren. Für mich ist der Vorrang das, was sie wirklich unterscheidet. Das Argument, dass sie nicht der gleiche Typ sind, ist auch in Smalltalk verloren. Weil in Smalltalk Schildkröten den ganzen Weg hinunter sind (was bedeutet, dass alles ein Objekt ist, also sind beide Seiten vom Typ Objekt). –

+0

@JayK Ja du hast Recht: technisch ist es absolut ein binärer Selektor. Es entspricht jedem Teil der Definitionen. Mein Kommentar war aus historischen Gründen. Zu Beginn wurden binäre Selektoren in Smalltalk für Operationen mit zwei Argumenten ähnlichen Typs eingeführt, und konzeptionelle Unterscheidung ergibt einen Sinn ... solange Sie keine andere Verwendung für diese Implementierungen finden. Was die Typen betrifft, denken Sie daran, dass "alles ein Objekt" bedeutet, dass wir keine Typen haben. Im Gegenteil, ich würde mehr zustimmen als "jedes Objekt definiert einen Typ" anstatt "alle Objekte sind vom gleichen Typ" –

+0

@ CarlosE.Ferro, dass Kommentar Antwort auf Travis war, richtig? – JayK

3

mich Carlos's answer mit etwas mehr dieser Selektoren Lassen ergänzen.

~= SmallFloat64 SmallInteger Object BoxedFloat64 

... ist die Negation des Gleichheitsvergleich =.

-> Object 

... ist eine prägnante Möglichkeit, eine Assoziation, ein Schlüsselwertpaar, zu erstellen. Schreiben Sie x -> y und rufen Sie eine Assoziationsinstanz mit x als Schlüssel und y als Wert ab. Sie werden bei der Implementierung von Dictionary verwendet.

... ist a) eine Abkürzung, um Objekte in einen Stream zu setzen.aStream << anObject sollte aStream nextPut: anObject oder aStream nextPutAll: anObject entsprechen, abhängig von der Art des Arguments. C++ - Entwicklern ist es wahrscheinlich bekannt.

... und b) eine binäre Nachricht, um Integer-Bits nach links zu verschieben. So haben Sie wahrscheinlich erraten, dass ...

>> Behavior TBehavior Integer TraitBehavior 

... zusätzlich zu dem, was Carlos schrieb über Methoden von Behaviors erhält, ist auch der rechte Shift-Operator für Integers.

==> Boolean 

... ist logische Implikation, die false ==> x bedeutet immer Antworten wahr und true ==> y Antworten y.

Beachten Sie, dass einige der anderen Nachrichten, z. B. **, nicht standardmäßig in Squeak implementiert sind.

In Pharo, ** ist eine binäre Nachricht alias für raisedTo:, so wird sie den Empfänger auf die Kraft des Arguments (5 ** 3 = 125), wie in Python und einigen anderen Sprachen zu erhöhen.

Verwandte Themen