Терминология для этого типа программирования поведения - PullRequest
0 голосов
/ 29 октября 2019

Я разработал и реализовал язык программирования.

Одной из особенностей этого языка является маскировка функции (в примере кода, я называю ее leftBind) в качестве переменной, так что любая следующая точканотация передается в качестве идентификатора.

Редактировать: Это аналогично методу доступа для класса, за исключением того, что здесь не используется класс. Применим ли здесь один и тот же термин «получатель» или «средство доступа»?

Цель этого языка - предоставить полностью функциональный язык, но окруженный средой, позволяющий создавать сложные конфигурации проекта, но защищать проект отнеавторизованное поведение в целом.

Пример этого:

/*leftbind aliases the identifier “sql” to the  function “quote”
It is called leftBind, since it’s binding the left side of the parse tree to a function*/ 
leftBind(“sql”, “quote”); 
q=“select * from foo where user=$sql.user”; // equivalent to quote(user)

Это становится очень удобным для более сложных задач или когда вы хотите встроить часто используемые функции в строки без лишних строк кода. засорение вашей программы.

Какая терминология для этого типа поведения?

1 Ответ

1 голос
/ 31 октября 2019

Если я правильно вас понимаю, это может быть комбинация строковой интерполяции и динамического поиска члена:

Строковая интерполяция

Например, в Swift вы можете вставлять выражения в код:

"This is \(getAdjective(), uppercasing: true) !"

эквивалентно

"This is ".append(getAdjective(), uppercasing: true).append(" !")

Определив метод append для String, который принимает дополнительные параметры (в данном случае логический uppercasing:) или принимает другой первый аргумент, вытаким образом, можно позволить людям расширять этот синтаксис заполнителя.

Вы также можете реализовать метод, который возвращает строку, чтобы вы могли использовать этот метод внутри \(...).

Важной частью здесь является то, чтоэто синтаксис для встраивания выражений в строки, детали того, как Swift реализует его (append метод в String - это просто то, как это делает Swift, а не как должна быть интерполяция строк.

Динамический поиск членов

В Swift класс может определять функцию, которая вызывается при обращении к члену, который не существует как свойство или функция:

@dynamicMemberLookup class MyClass {
    var dictionary: [String: String]
    subscript(dynamicMember: String) -> String {
        return dictionary[dynamicMember] ?? ""
    }
}

Это позволяет вам динамически создавать свои собственные переменные. Когда вы пишете

let foo = MyClass()
let myString = foo.bar

, компилятор просто генерирует код для

let foo = MyClass()
let myString = foo.subscript(dynamicMember: "bar")

, это то, о чем вы думаете?

...