Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическая типизация в Ruby 
V
    Опции темы
beroal
  Дата 23.1.2006, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 18.1.2003
Где: Украина

Репутация: нет
Всего: 3



Как у Ruby сделана динамическая типизация? Когда я работал с PHP, мне очень мешала некоторые противные особенности, а именно, что он молча конвертировал нечисловые строки в число ноль, ноль в ложь, если требовался массив - превращал число в массив из одного элемента и т.п. Разумеется, большинство этих преобразований типа были просто ошибками в программе, но отлавливать их из-за этой дурацкой динамической типизации было крайне трудно.
Как у Ruby с этим дела?
PM WWW   Вверх
Pete
Дата 28.1.2006, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 318
Регистрация: 5.1.2006
Где: Москва

Репутация: 2
Всего: 12



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:00


--------------------
Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу)
Не откладывай на завтра то, что можешь сделать сегодня. (Пословица)
А теперь выпишем точное значение числа пи... (Препод)
Жахни, Пендальф! © Гоблин
PM   Вверх
beroal
Дата 29.1.2006, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 18.1.2003
Где: Украина

Репутация: нет
Всего: 3



Цитата(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).

Спасибо, это именно то, что я хотел знать.
PM WWW   Вверх
Pete
Дата 1.2.2006, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 318
Регистрация: 5.1.2006
Где: Москва

Репутация: 2
Всего: 12



Прошу прощения, to_i — это, конечно же, не оператор, а метод. smile


--------------------
Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу)
Не откладывай на завтра то, что можешь сделать сегодня. (Пословица)
А теперь выпишем точное значение числа пи... (Препод)
Жахни, Пендальф! © Гоблин
PM   Вверх
Cr@$h
Дата 24.8.2006, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: нет
Всего: 41




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

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby: Общие вопросы"
source777
  • С чего начать? начинаем
  • Ссылки на полезные ресурсы смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1096 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.