Я не собираюсь делать подробное объяснение языка балерины здесь, в этой статье. Если вы хотите узнать больше, посетите сайт Ballerina Language. [1]

В любом языке программирования есть элементы сравнения типов переменных в языке, встроенном в систему типов. Если вы знакомы с языком java, вы, вероятно, сталкивались с методом сравнения типов с использованием объектов класса и оператора instanceof в java. См. [2], в котором есть хорошее резюме сравнения типов в java. Это также знакомит с базовой семантикой сравнения типов языков программирования.

Необходимость сравнения типов для языка Ballerina возникла вместе с введением в Ballerina поддержки типизированных переменных «any». В основном с этой поддержкой можно присвоить значение любого типа данных в Ballerina переменной с любым типом. Фактический тип типизированной переменной «любая» доступен во время выполнения. Таким образом, мы не можем делать никаких предположений о типе значения, которое любая типизированная переменная содержит заранее, во время компиляции. В разных точках выполнения «любая» типизированная переменная может содержать разные типы значений, поэтому полезно знать фактический тип значения, которое «любая» типизированная переменная удерживает в данный момент времени, чтобы выполнить некоторую настраиваемую логику на основе некоторого сравнения на тип значения. Если вас интересуют более подробные сведения о поддержке «любых» типизированных переменных, посетите [3], где подробно описывается эта тема.

В основном, есть два случая при рассмотрении сравнения типов для выражений в Ballerina.

  1. Определите, указывают ли два выражения на один и тот же тип.
type type_1 = typeof exp_1;
type type_2 = typeof exp_2;
if ( type_1 == type_2 ) {
   // do then logic
}

2. Определите, указывает ли одно выражение на данный / известный тип балерины.

type type_1 = typeof exp_1;
if ( type_1 == typeof int ) {
   // do then logic
}

Здесь мы в основном проверяем, оценивается ли exp_1 в значение int - Ballerina, встроенный в тип значения. Здесь задан тип int / известный тип на момент сравнения. Для предыдущего случая в основном мы не знаем типы, для которых оцениваются exp_1 и exp_2, единственная информация, которая у нас есть, - это то, равны ли эти два оцениваемых типа для двух выражений.

По сути, у Ballerina есть унарный оператор typeof, с которым можно работать, любое выражение балерины и встроенные (например: - int, string и т. Д.) И пользовательские имена типов (например: - Struct), оператор вернет связанный тип, который представлен выше, и который можно использовать для сравнения, как указано выше.

Вот рабочий образец оператора typeof, который можно найти в качестве примера Ballerina. [4]

[1] https://ballerinalang.org/

[2] https://mostlymagic.wordpress.com/2013/10/25/how-to-compare-types-in-java/

[3] https://medium.com/@lanka.vitharana/any-type-support-in-ballerina-d9651ac53695

[4] https://ballerinalang.org/docs/by-example/typeof