|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 24 May 2003 09:33:34 To : "Rostislav Chebykin" Subject : Re: Как же Switch? -------------------------------------------------------------------------------- Здравствуй, Rostislav Chebykin. AA>> Большое количество вариантов выбора скорее всего указывает на AA>> неудачный дизайн. Приведи, пожалуйста, пример задачи в которой AA>> это необходимо. RC> Изначальная задача заключалась в том, чтобы ставить слово после числа RC> в нужном падеже: "1 байт", "2 байта", "6 байтов", "3.14 байта" и т. д. RC> Hо впереди еще много задач из области обработки текстов на русском RC> языке. А там ситуации switch на каждом шагу. RC> Впрочем, в данном конкретном случае мне, кроме собственно решения RC> задачи, нужна еще Perl'овая элегантность. Мне не хочется применять RC> этот язык тупо и топорно. Так что хотелось бы как минимум найти RC> решение, в котором '$var == ' не повторяется четыре раза. В данном случае our %forms = { 0 => 0, 1 => 1, 2 => 2, ... 9 => 3 } return $dual if $var != int($var); return $plural if $var%100 > 10 && $var%100 < 20; return $plural if $forms{$var%10} == 3; return $dual if $forms{$var%10} == 2; return $singular; Если сделать хэш поразвесистей (ввести в него формы для 1, 2, 3 и 4, но для каждого десятка), то можно еще строчку сократить. Где тут место для switch? -- Artem Chuprina RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/122.256, ICQ: 13038757 --- ifmail v.2.15dev5 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/11477b4c42d5e.html, оценка из 5, голосов 10
|