r12 - 22 May 2007 - 18:37:10 - Yuri KlimovYou are here: TWiki >  Refaldevel Web > JavaWrapGen

Преобразование данных

В Рефале символы могут быть следующими: символ-литера, символ-слово и символ-число. Эти данные естественным образом отображаются на Ява-данные типов java.lang.Character, java.lang.String, java.math.BigInteger соответственно. Если в Ява-интерфейсе аргумент или результат имеет указанный тип, то при передачи данных из Рефала в Яву или наоборот происходит преобразование данных. Рефал не объектно-ориентированный язык, поэтому это преобразование приманенное дважды (сначала из Явы в Рефал, а потом из Рефала в Яву) получится тождественным по значению (результат будет равен аргументу по методу equals), но не по ссылке.

java.lang.Character символ-литера
java.lang.String символ-слово
java.math.BigInteger символ-число

Если в Ява-интерфейсе аргумент или результат имеет один из следующих типов, то данные автоматически приводятся к одному из типов java.lang.Character, java.lang.String, java.math.BigInteger, а потом отображается в Рефал-данные символ-литера, символ-слово или символ-число, соответственно.

byte java.math.BigInteger  
java.lang.Byte java.math.BigInteger  
short java.math.BigInteger  
java.lang.Short java.math.BigInteger  
int java.math.BigInteger  
java.lang.Integer java.math.BigInteger  
long java.math.BigInteger  
java.lang.Long java.math.BigInteger  
char java.lang.Character  
boolean java.lang.String true ↔ "True", false ↔ "False"
java.lang.Boolean java.lang.String true ↔ "True", false ↔ "False"

Отдельно следует отметить, что если Ява-данное есть null, то оно отображается в уникальное значение библиотечной функции <Java.Null>.

null <Java.Null>

Если тип не один из указанных, то данное передаётся в Рефал без изменение как символ-ссылка на Ява-объект.

Если тип java.lang.Object, то пользователь может указать один или несколько конкретных тип. Тогда значение будет проверяться на принадлежность одному из указанных типов и применяться преобразование, указанное выше.

Для объектных типов, указанных выше, пользователь может попросить систему не применять преобразование, а передать значение как символ-ссылка на Ява-объект.

Если тип - тип массива, то данное будет преобразовываться в последовательность символов, где каждый элемент массива преобразуется в символ согласно указанному правилу. Как и в случае с java.lang.Object, пользователь может уточнять тип элементов массива или просить не применять правило для массива целиком или для элементов массива.

Если тип элементов массива - снова массив, то преобразование применяется для элементов массива, а после полученные выражения одеваются в скобки и составляются в одно результатное выражение.

Мысли. Также символы могут быть Рефал-ссылками: ссылка на функции, ссылка на ящик, ссылка на таблицу, ссылка на канал, ссылка на вектор, ссылка на строку. Должны ли они получаться из Ява-данных? Думаю да, если удастся добиться отсутствия каких-либо преобразований данных. А вот обратное отображение Рефал-ссылок в Ява-данные вряд ли нужны: без преобразований не обойтись.

-- Yuri Klimov - 22 May 2007


Преобразование данных (old)

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

         
  Refal Type s e
Java Type  
byte byte ↔ Number -
short short ↔ Number -
int int ↔ Number -
long long ↔ Number -
char char ↔ Character -
boolean boolean ↔ Word
true→True, false→False, true←(True|true), false←^(True|true)
-
null null ↔ <Java.Null> -
java.lang.string java.lang.string ↔ Word -
any object type as is -
typeJ[] - typeJ[] ↔ classR* where typeJ ↔ classR for typeX and s
Пояснение для случая массива и типа e: каждый элемент массива преобразуется согласно правилу для типа массива и s, а массив заменяется на выражение из преобразованных элементов.

-- Yuri Klimov - 02 Mar 2007

Edit | WYSIWYG | Attach | Printable | Raw View | Backlinks: Web, All Webs | History: r12 < r11 < r10 < r9 < r8 | More topic actions
 
R+

This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback