Я Java-разработчик, который только начинает изучать Ruby. Есть ли в Ruby примитивные типы? Не могу найти их список. Если нет, то почему?
Существуют ли примитивные типы в Ruby?
Ответы (4)
Основной принцип Ruby заключается в том, что все данные должны быть представлены в виде объектов. Другие языки, такие как Smalltalk, следуют аналогичной парадигме.
Преимущество такого дизайна в том, что он делает Ruby более элегантным и легким для изучения. Правила, применяемые к объектам, последовательно применяются ко всему Ruby.
Например, когда новички впервые изучают Java, разница между примитивным типом int и классом-оболочкой Integer может сбивать с толку. Эта путаница усугубляется иногда запутанными неявными преобразованиями между ними через автоупаковку.
Так зачем же таким языкам, как Java или C#, заморачиваться примитивными типами? Ответ — производительность. Создание объектов влечет за собой дополнительные накладные расходы по сравнению с примитивами.
5.object_id
отличается от 5902123.object_id
. Это два разных объекта Fixnum.
- person tadman; 13.09.2013
В Ruby нет примитивных типов данных. Каждое значение является объектом, даже литералы превращаются в объекты:
nil.class #=> NilClass
true.class #=> TrueClass
'foo'.class #=> String
:bar.class #=> Symbol
100.class #=> Integer
0x1a.class #=> Integer
0b11010.class #=> Integer
123.4.class #=> Float
1.234e2.class #=> Float
Это позволяет вам писать красивый код, например:
3.times do
puts "Hello from Ruby"
end
Цитата из О Ruby
В Ruby все является объектом. Каждому биту информации и кода можно присвоить собственные свойства и действия.
Во многих языках числа и другие примитивные типы не являются объектами. Ruby следует влиянию языка Smalltalk, предоставляя методы и переменные экземпляра для всех его типов. Это упрощает использование Ruby, поскольку правила, применяемые к объектам, применяются ко всему Ruby.
Java предпочитает сохранять некоторые примитивные типы в основном для повышения производительности, но вы должны признать, что не каждый тип, являющийся классом, иногда делает Java-код немного неуклюжим. Философия Ruby заключается в том, чтобы облегчить жизнь программиста, и я думаю, что сделать все объектами — это один из способов добиться этого.
=>
объектом? Странно, что в Ruby я могу сделать 1.method(:+).class
и получить Method
, но {}.method(:=>).class
— синтаксическая ошибка. Как будто... не все есть Объекты?
- person Ziggy; 13.06.2014
=>
это не метод на Hash. Но {}.method(:[]).class
возвращает Method
, как и следовало ожидать. Так что нет, не все в Ruby является объектом, если вы включаете во все нечетные биты синтаксиса, пробелы, зарезервированные слова и т. д. - это слишком много.
- person zetetic; 07.01.2015
В ruby нет примитивных типов данных. Потому что ruby — чисто объектно-ориентированный язык. По сути, существуют типы данных, подобные другим языкам, но эти типы данных представляют собой классы, подобные коллекциям в java.
Если вы определяете любое строковое значение, такое как Akshay, то это объект. Вы можете проверить изображение ниже, на котором Акшай имеет object_id 30300. Пожалуйста, нажмите на ссылку, чтобы проверить объекты на консоли рельсов. Из других примеров с изображения мы можем решить, что все является объектом в ruby, за исключением ключевых слов.
Итак, мы можем заключить, что ruby преобразовал эти примитивные типы данных в классы.
Консоль Ruby с примитивными данными в качестве объекта