Инициализация, сравнение и тип приведения
Каждые переменная или поле могут потенциально быть строкой или числом, либо состоять из того и другого. Когда значение переменной устанавливается при присвоении:
var = expr
то тип переменной определяется выражением. В арифметических выражениях тип - цифровой, в конкатенации - строковый, и т.д. Если назначение является простым копированием:
v1 = v2
то типом v1 становится тип v2. При сравнении, если оба операнда являются цифровыми, то производится цифровое сравнение. В противном случае, операнды рассматриваются как строковые и сравнение производится над строками. Тип любого выражения может быть приведен к цифровому таким образом:
expr + 0
и к строковому типу:
expr ""
(это конкатенация с пустой строкой)
Инициализированные переменные имеют цифровое значение 0, а строковые - значение "". Соответственно, если x проинициализировано, то оператор
if (x) ...
имеет значение "ложь", а
if (!x) ... if (x == 0) ... if (x == "") ...
все являются истиной, но
if (x == "0") ...
является ложью.
Тип поля определяется по контексту. Например:
$1++
означает, что $1 будет цифровым, и
$1 = $1 "," $2
означает, что и $1 и $2 являются строковыми. Приведение к типу выполняется при необходимости.
Если по контексту тип не может быть определен, например:
if ($1 == $2) ...
тип поля определяется при вводе.
Поля, которые являются нулевыми, имеют строки со значением "", они не являются цифровыми.
Определения типов для элементов массива, созданных split(), аналогичны определению типов для полей.
Так, если arr[i] не существует, то :
if (arr[i] == "") ...
приводит к тому, что он появляется со значением "".
| |
Comments: info@citmgu.ru Designed by Andrey Novikov Copyright © CIT |