[Moscow.pm] Строгая типизация в Perl
Nikita Zubkov
nikzubkov на gmail.com
Сб Сен 1 20:01:54 PDT 2012
Простите, но Вы конкатенируете не строки, а строку и "контейнер" для
utf8, который, как я уже писал, введен не потому что utf8 это другая
кодировка, а потому что utf8 это кодировка с переменной длинной
кодовой позиции и символа. Как этот пример связан с изначальным
тезисом о защите от конкатенации СТРОК в разных кодировках? В общем
случае этот тезис не подтверждается, ведь latin1 и cp1251 легко
конкатинируются. Да и Вы же сами в конце показали как прекрасно
конкатенируютя СТРОКИ в utf8 и latin1. Какая от этого польза в
реальном коде?
01.09.2012, в 15:49, Андрей П. Ковбович <akovbovich на gmail.com> написал
(а):
> 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 mailing list
> moscow-pm на pm.org | http://moscow.pm.org
Подробная информация о списке рассылки Moscow-pm