[Moscow.pm] Строгая типизация в Perl
Андрей П. Ковбович
akovbovich на gmail.com
Сб Сен 1 06:49:38 PDT 2012
1 сентября 2012 г., 2:14 пользователь Nikita Zubkov
<nikzubkov на gmail.com> написал:
> То есть получается, что я могу сложить строки (type string) в кодировках
> utf8 и latin1. Где в приведенном примере это запрещение? В string ложится
> байтовая последовательность, не привязанная к кодировке и это не
> контролируется ни на каком этапе.
Прежде чем делать ошибочные выводы, проверили бы.
# open CamomileLibraryDefault.Camomile;;
# module UTF8 = (UTF8 : UnicodeString.Type);;
module UTF8 : CamomileLibraryDefault.Camomile.UnicodeString.Type
# module UTF8Conv = CharEncoding.Make(UTF8);;
module UTF8Conv :
sig
type text = UTF8.t
val decode :
CamomileLibraryDefault.Camomile.CharEncoding.t -> string -> text
val encode :
CamomileLibraryDefault.Camomile.CharEncoding.t -> text -> string
end
# let latin1 = "hello";;
val latin1 : string = "hello"
# let utf8 = UTF8Conv.decode (CharEncoding.latin1) latin1;;
val utf8 : UTF8Conv.text = <abstr>
# latin1, utf8;;
- : string * UTF8Conv.text = ("hello", <abstr>)
теперь пробуем склеить строки
# latin1 ^ utf8;;
Error: This expression has type UTF8Conv.text = UTF8.t
but an expression was expected of type string
а если снова привести к одной кодировке
# latin1 ^ (UTF8Conv.encode CharEncoding.latin1 utf8);;
- : string = "hellohello"
> Таким образом, Ваш начальный тезис не подтвердился. Данная библиотека не
> использует строгую типизацию в указанной Вами манере и тезис про извращение
> в силе.
Подтвердился, см. выше.
Подробная информация о списке рассылки Moscow-pm