Существуют ли примитивные типы в Ruby?

Я Java-разработчик, который только начинает изучать Ruby. Есть ли в Ruby примитивные типы? Не могу найти их список. Если нет, то почему?


person emily    schedule 13.09.2013    source источник
comment
Я знаю, что это не ответ на ваш вопрос, но если вы не знакомы с Ruby, на Codecademy есть отличный учебник по адресу (www.codecademy.com/tracks/ruby). Надеемся, что, изучив руководства, вы сэкономите себе много времени на устранение неполадок в будущем!   -  person jwarner112    schedule 13.09.2013


Ответы (4)


Основной принцип Ruby заключается в том, что все данные должны быть представлены в виде объектов. Другие языки, такие как Smalltalk, следуют аналогичной парадигме.

Преимущество такого дизайна в том, что он делает Ruby более элегантным и легким для изучения. Правила, применяемые к объектам, последовательно применяются ко всему Ruby.

Например, когда новички впервые изучают Java, разница между примитивным типом int и классом-оболочкой Integer может сбивать с толку. Эта путаница усугубляется иногда запутанными неявными преобразованиями между ними через автоупаковку.

Так зачем же таким языкам, как Java или C#, заморачиваться примитивными типами? Ответ — производительность. Создание объектов влечет за собой дополнительные накладные расходы по сравнению с примитивами.

person dbyrne    schedule 13.09.2013
comment
МОЙ БОГ! за 1 минуту или меньше вы написали столько строк... :) - person Arup Rakshit; 13.09.2013
comment
Даже то, что другие языки считают примитивами, в Ruby является объектами. Например: 5.object_id отличается от 5902123.object_id. Это два разных объекта Fixnum. - person tadman; 13.09.2013
comment
@VirtualDXS Я не уверен, какой Ruby вы используете, но у меня он постоянно возвращает одно и то же значение. - person tadman; 25.09.2016
comment
@tadman Ты прав; Я ошибаюсь. Строки ведут себя так, поэтому я предположил, что и фиксированные числа тоже. - person Dessa Simpson; 25.09.2016
comment
Строки абсолютно подходят, поэтому в Ruby вместо этого используется конструкция Symbol. Сравнить эквивалентность легко, если совпадает object_id. В противном случае сравнение строк занимает гораздо больше времени. - person tadman; 25.09.2016

В 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
person Stefan    schedule 13.09.2013

Цитата из О Ruby

В Ruby все является объектом. Каждому биту информации и кода можно присвоить собственные свойства и действия.

Во многих языках числа и другие примитивные типы не являются объектами. Ruby следует влиянию языка Smalltalk, предоставляя методы и переменные экземпляра для всех его типов. Это упрощает использование Ruby, поскольку правила, применяемые к объектам, применяются ко всему Ruby.

Java предпочитает сохранять некоторые примитивные типы в основном для повышения производительности, но вы должны признать, что не каждый тип, являющийся классом, иногда делает Java-код немного неуклюжим. Философия Ruby заключается в том, чтобы облегчить жизнь программиста, и я думаю, что сделать все объектами — это один из способов добиться этого.

person Yu Hao    schedule 13.09.2013
comment
является ли => объектом? Странно, что в Ruby я могу сделать 1.method(:+).class и получить Method, но {}.method(:=>).class — синтаксическая ошибка. Как будто... не все есть Объекты? - person Ziggy; 13.06.2014
comment
Ну => это не метод на Hash. Но {}.method(:[]).class возвращает Method, как и следовало ожидать. Так что нет, не все в Ruby является объектом, если вы включаете во все нечетные биты синтаксиса, пробелы, зарезервированные слова и т. д. - это слишком много. - person zetetic; 07.01.2015

В ruby ​​нет примитивных типов данных. Потому что ruby ​​— чисто объектно-ориентированный язык. По сути, существуют типы данных, подобные другим языкам, но эти типы данных представляют собой классы, подобные коллекциям в java.

Если вы определяете любое строковое значение, такое как Akshay, то это объект. Вы можете проверить изображение ниже, на котором Акшай имеет object_id 30300. Пожалуйста, нажмите на ссылку, чтобы проверить объекты на консоли рельсов. Из других примеров с изображения мы можем решить, что все является объектом в ruby, за исключением ключевых слов.

Итак, мы можем заключить, что ruby ​​преобразовал эти примитивные типы данных в классы.

Консоль Ruby с примитивными данными в качестве объекта

person Akshay Kakade    schedule 12.02.2021