Форум программистов, компьютерный форум, киберфорум
Ruby
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
34 / 34 / 3
Регистрация: 12.10.2011
Сообщений: 175

Аналог перечисления в Pascal / C

26.05.2012, 17:16. Показов 2042. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Недавно начал изучать Руби, нашел в книге пример, который не понял:

Ruby
1
2
3
4
5
Hearts = :Hearts
Clubs = :Clubs
Diamonds = :Diamonds
Spades = :Spades
# это один из способов присвоить уникальное значение константе, некий анало перечисления в Pascal / C
я, имея навыки в C# сравниваю это с выражением:

C#
1
2
3
4
5
6
7
public enum Suit : byte
{
  Hearts = 0,
  Clubs,
  Diamonds,
  Spades
}
но, увы, по всей видимости, все не так, ибо:

Ruby
1
2
3
4
5
A, B = 0, 1
puts #{A} + " : " + #{B}
A = :ConstA
B = :ConstB
puts #{A} + " : " + #{B}
выводит сначала
0 : 1,
а потом
ConstA : ConstB

так вот, что я не понял, и как есть на самом деле?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.05.2012, 17:16
Ответы с готовыми решениями:

Есть ли аналог модуля tpdate.tpu (Turbo Pascal) для Free Pascal
Внимание! Нужно срочно узнать название юнита для freepascal, который выполняет функции tpdate.tpu для турбопаскаля!!! Помогите!!!

c++ union, аналог в pascal
Собственно. Обращение к одной и той же переменной по разным типам через переходники вида ...

php аналог pascal
Напишите плз как на паскаде будет и еще комменты что каждая функция делает. спас.. если есть уже такая функция которая считает сколько букв...

2
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
27.05.2012, 08:52
Цитата Сообщение от dotFive Посмотреть сообщение
Недавно начал изучать Руби, нашел в книге пример, который не понял:
это не аналог перечисления, это т.н. «символы» (symbols, не путать с characters) — специальные объекты для представления имен и некоторых строк в интерпретаторе. Создаются с помощью литерального синтаксиса :string или :"string with spaces", или с помощью различных методов преобразования (.to_sym, .intern). Похожи на символы из различных диалектов Lisp. Они обладают одним свойством: символы с одинаковым содержимым (т.е. строкой) всегда представляют один и тот же объект. Часто из-за этого они используются в качестве ключей для хеш-таблиц. В коде, который ты привел выше, символы используются как уникальные идентификаторы, всего-навсего.

Цитата Сообщение от dotFive Посмотреть сообщение
но, увы, по всей видимости, все не так, ибо:
Ruby
1
2
3
4
5
A, B = 0, 1
puts #{A} + " : " + #{B}
A = :ConstA
B = :ConstB
puts #{A} + " : " + #{B}
выводит сначала
0 : 1,
а потом
ConstA : ConstB
в данном случае поведение кода абсолютно логично: ты сначала присваиваешь двум переменным целочисленные значения, потом присваиваешь им символы. При выводе puts в строке интерполируются значения переменных, при этом происходит преобразования типа переменной к строке. Для символов оно тривиально — возвращается просто строка, которая обозначает тип. Между символами и целыми числами в Ruby, в отличие от C (в котором значение перечисления непосредственно является целым числом), однозначного соответствия не существует (если не считать таким соответствием .object_id)

Как представить в Ruby перечисления. Можно, к примеру, воспользоваться именованными константами и спрятать их внутри модуля, чтобы не засорять глобальное пространство имен:

Ruby
1
2
3
4
5
6
7
8
9
10
11
12
irb(main):001:0> module Suit
irb(main):002:1>   SPADES = 0
irb(main):003:1>   HEARTS = 1
irb(main):004:1>   DIAMONDS = 2
irb(main):005:1>   CLUBS = 3
irb(main):006:1> end
=> 3
irb(main):007:0> Suit::SPADES
=> 0
irb(main):008:0> Suit::CLUBS
=> 3
irb(main):009:0>
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
27.05.2012, 09:41
Вот пример автоматической генерации перечисления: https://github.com/karlin/enumeration

Можно изменить этот пример так, чтобы получить простейшее C-like перечисление:

Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
 
module Enum
  def self.of(*symbols)
    val = 0
    
    enum = Module.new
 
    symbols.each do |sym|
      enum.const_set sym.to_s.upcase, val
      val += 1
    end
 
    enum.freeze
  end
end
Ruby
1
2
3
4
5
6
irb(main):002:0> Suit = Enum.of :spades, :hearts, :diamonds, :clubs
=> Suit
irb(main):003:0> Suit::SPADES
=> 0
irb(main):004:0> Suit::CLUBS
=> 3
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.05.2012, 09:41
Помогаю со студенческими работами здесь

Аналог \t (C++) в Pascal ABC
Подскажите, есть ли аналог \t для Паскаля? Глаз режет неровный двумерный массив...

Аналог функции Div из Pascal в C#
h012:=dif(r0,r2,a01,a12); как перевести в с# (n012 ничего не обозначает (double h012 = (r0/r2/a01/a12))?

Аналог MaxAvail во Free Pascal.
Подскажите аналог MaxAvail во Free Pascal. Заранее благодарю.

Если в C++ аналог оператора with в Pascal?
Если в C++ аналог оператора with в Pascal?

Есть ли в Pascal аналог шаблонов из C++
Есть ли в Pascal аналог Шаблонов из С++? Если да, то как, например, реализовать такую процедуру: template< typename T > ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru