MethodFinder на помощь
Мы также должны помнить, что для таких случаев, как этот, у нас есть MethodFinder
в Фаро.Вы используете его, оценивая имеющиеся у вас примеры.В нашем случае
MethodFinder methodFor: #(('abcdef' 30) 'abcdef' ('abcdef' 3) 'abc')
даст
"'(data1 contractTo: data2) (data1 truncateTo: data2) '"
, который содержит уже упомянутый #truncateTo:
и добавляет #contractTo:
.Обратите внимание, что последний реализует другую разновидность методов сокращения, а именно
'abcdef' contractTo: 6 "'a...f'"
, вероятно, не то, что вам нужно сегодня, а часть информации, которая может оказаться полезной в будущем.
Синтаксис
Синтаксис MethodFinder
требует Array
длины 2 * #examples
, где каждый из примеров состоит из пары ( входные аргументы , результат ).
Интересно, что Squeak фигурные скобки позволяют легко создавать динамически создаваемые примеры:
input := 'abcdef'.
n := 1.
MethodFinder methodFor: {
{input. input size + n}. input.
{input. input size - n}. input allButLast
}
также найдет truncateTo:
.