2017-01-19 16 views
4

Написание документации для начинающих, и я столкнулся с проблемой. Зная, что делают бинарные сообщения, не означает, что вы знаете, что они называются!Менее известные бинарные сообщения Smalltalk и их значение?

Некоторые очевидные из них, а также их соответствующие классы:

- "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 

Менее очевидные из них:

*= 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

Некоторые из ваших выборов для менее очевидных кажутся произвольными для меня. В частности, некоторые из общих математических/логических, которые встречаются в широких рядах других языков (&, |,%, //, **) –

ответ

3
>> Behavior TBehavior Integer TraitBehavior 

не является на самом деле бинарная, в том смысле, что его аргументы не то же самое тип. Он проектирует метод от поведения (приемника), названный символом (аргумент)

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

Забудь их, слишком специфичны из этих классов

== ProtoObject 

Идентичность Comparation, it was discussed in a recent question

~~ ProtoObject 

Это отрицание ==

% Number 

модуль оператора (остаток от целочисленного деления)

& Collection RBBrowserEnvironment Integer ZnUrl RBAbstractCondition False Boolean True 

Это и оператор Булев, побитовое двоичную и для целых чисел, но для коллекций она имеет различное значение

+= ThirtyTwoBitRegister FloatArray 
/= FloatArray 

Они, как и операторы C, выполняют операцию, изменяющую приемник, вместо создания новой поплавковой матрицы

\\ Collection Number LargeInteger SmallInteger Duration Point 

для величин, это остальная часть целочисленного деления. Это имеет другое значение для коллекций.

@ "returns a point?" 

только для numbres, он имеет различные значения на другие классы

Я опущенные тех, что я не знаю наизусть

+1

Я думаю, что >> очень много двоично. Smalltalk определяет «двоичный селектор» как составной из инфиксных символов, приемника и одного аргумента (1 + 1 = 2, т. Е. Двоичного), и, самое главное, на уровне приоритета между унарными селекторами и селекторами ключевых слов. Для меня приоритет - это то, что действительно отличает их. Аргумент о том, что они не одного типа, также теряется в Smalltalk. Потому что в Smalltalk это черепахи полностью вниз (что означает, что все объекты, поэтому обе стороны имеют объект типа). –

+0

@JayK да, вы правы: технически это абсолютно двоичный селектор. Он соответствует каждой части определений. Мой комментарий был по историческим причинам. Вначале двоичные селекторы были введены в Smalltalk для операций с двумя аргументами аналогичного типа и что концептуальное различие имеет смысл ... пока вы не найдете другого использования для этих реализаций. Что касается типов, помните, что «все является объектом» не означает, что у нас нет типов. Напротив, я бы согласился больше, чем «каждый объект определяет тип», а не «все объекты одного типа» –

+0

@ CarlosE.Ferro, что комментарий был в ответ на Трэвиса, правильно? – JayK

3

Позвольте мне дополнить Carlos's answer с некоторыми более из этих селекторов.

~= SmallFloat64 SmallInteger Object BoxedFloat64 

... это отрицание сравнения равенства =.

-> Object 

... представляет собой краткое средство создания Ассоциации, пары значений ключа. Напишите x -> y и получите экземпляр ассоциации с x в качестве ключа и y в качестве значения. Они используются при реализации Словаря.

... a) сокращенное обозначение предметов в поток.aStream << anObject должен быть эквивалентен aStream nextPut: anObject или aStream nextPutAll: anObject, в зависимости от типа аргумента. Вероятно, он знаком с разработчиками на C++.

... и b) двоичное сообщение для смещения битов Integer влево. Таким образом, вы, наверное, догадались, что ...

>> Behavior TBehavior Integer TraitBehavior 

... в дополнении к тому, что Карлос писал о получении методов из поведений, также оператор правого сдвига для Целых.

==> Boolean 

... Логично Подразумевается, что означает false ==> x всегда отвечает истинным и true ==> y ответы у.

Обратите внимание, что некоторые другие сообщения, такие как **, по умолчанию не выполняются в Squeak.

В Pharo, ** двоичный псевдоним сообщений для raisedTo:, поэтому он поднимает трубку к силе аргумента (5 ** 3 = 125), как в Python и некоторых других языках.

 Смежные вопросы

  • Нет связанных вопросов^_^