Аз съм разработчик на 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, тогава тя е обект. Можете да проверите изображението по-долу, в което Akshay има object_id 30300. Моля, щракнете върху връзката, за да проверите обектите на конзолата на релсите. От още примери от изображението можем да решим, че всичко е обект в ruby, с изключение на ключовите думи.
Така че тук можем да заключим, че Ruby преобразува тези примитивни типове данни в класове.
Конзолата на Ruby с примитивни данни като обект