Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: Общие вопросы > Динамическая типизация в Ruby


Автор: beroal 23.1.2006, 14:45
Как у Ruby сделана динамическая типизация? Когда я работал с PHP, мне очень мешала некоторые противные особенности, а именно, что он молча конвертировал нечисловые строки в число ноль, ноль в ложь, если требовался массив - превращал число в массив из одного элемента и т.п. Разумеется, большинство этих преобразований типа были просто ошибками в программе, но отлавливать их из-за этой дурацкой динамической типизации было крайне трудно.
Как у Ruby с этим дела?

Автор: Pete 28.1.2006, 22:46
1. Ruby конвертирует строку в число, например, методом to_i. При этом выражение «"abc".to_i» вернет 0. Если же написать «"abc" + 123», то возникнет ошибка.
2. Числа в массив не конвертируются автоматически, как, например, здесь: «[1, 2, 3] + 5» (здесь «+» используется для объединения массивов).
3. В ruby каждая переменная — объект, то есть true (при проверке условия). nil («ничто», аналог NULL в Си) — false. Так что:

irb(main):001:0> puts "!!!!" if 0
!!!!
=> nil
(0 = true);

irb(main):002:0> puts "!!!!" if [1, 2, 3]
!!!!
=> nil
([1, 2, 3] = true);

irb(main):003:0> puts "!!!!" if nil
=> nil
(nil = false).

Автор: beroal 29.1.2006, 17:25
Цитата(Pete @ 28.1.2006, 19:46)
1. Ruby конвертирует строку в число, например, оператором to_i. При этом выражение «"abc".to_i» вернет 0. Если же написать «"abc" + 123», то возникнет ошибка.
2. Числа в массив не конвертируются автоматически, как, например, здесь: «[1, 2, 3] + 5» (здесь «+» используется для объединения массивов).
3. В ruby каждая переменная — объект, то есть true (при проверке условия). nil («ничто», аналог NULL в Си) — false. Так что:

irb(main):001:0> puts "!!!!" if 0
!!!!
=> nil
(0 = true);

irb(main):002:0> puts "!!!!" if [1, 2, 3]
!!!!
=> nil
([1, 2, 3] = true);

irb(main):003:0> puts "!!!!" if nil
=> nil
(nil = false).

Спасибо, это именно то, что я хотел знать.

Автор: Pete 1.2.2006, 15:01
Прошу прощения, to_i — это, конечно же, не оператор, а метод. smile

Автор: Cr@$h 24.8.2006, 16:25

M
Cr@$h
Тема выделена из разговора об особенностях Ruby.
Pete ++ за консультацию.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)