Рубиновые контейнеры
В Ruby мы можем легко поместить определение метода внутри класса-контейнера, а затем создать новые объекты, отправив новое сообщение в этот класс, как и в большинстве языков сценариев. В Ruby есть встроенный модуль Enumerable , который включается классами Strings, Array, Hash, Range и другими, представляющими набор значений. В основном существует четыре типа контейнеров, которые представляют набор данных в Ruby:
- Строки. Строка представляет собой последовательность или набор из одного или нескольких символов.
- Массивы. Массивы представляют собой набор упорядоченных объектов с целочисленным индексом.
- Хэши: Хэши — это наборы уникальных пар <key, value>.
- Его часто называют ассоциативными массивами, картами или словарями.
- Это неупорядочено.
- Range s: диапазоны отображают набор значений между начальной и конечной точками. Значения могут быть диапазоном, символом, строкой или объектом.
Рубиновые струны:
Строки Ruby являются изменяемыми и создаются с использованием одинарных (' ') или двойных кавычек (" ") без упоминания типов данных.
Пример 1:
Ruby
# Ruby code implementation # for creation of Ruby Strings # using single quotes puts "Ruby String using single quotes in GFG!" # using double quotes puts "Ruby String using double quotes in GFG!" # storing string into variables str = "Ruby String using variable in GFG!" # displaying string puts str |
Выход:
Ruby String using single quotes in GFG! Ruby String using double quotes in GFG! Ruby String using a variable in GFG!
Двойные кавычки интерполируют переменные, тогда как одинарные кавычки не могут интерполировать.
Пример 2:
Ruby
# Ruby code implementation to # show single and double quotes str1 = "Hello Geeks!" str2 = "Hello GFG" # using single quotes puts "#{str1}" puts "#{str2}" puts "#{str1}" puts "#{str2}" |
Выход:
#{str1} #{str2} Hello Geeks! Hello GFG
Доступ осуществляется путем упоминания индекса внутри квадратной скобки[].
Пример 3:
Ruby
# Ruby code implementation # for accessing of Ruby Strings str = "GeeksforGeeks" # accessing the specified substring puts str[ "Geeks" ] # print a single character from a # string using positive index puts str[ 2 ] # print a single character from a # string using negative index puts str[- 2 ] # print string in a range using comma(,) puts str[ 4 , 10 ] # print string in a range using(..) operator puts str[ 4 .. 8 ] |
Выход:
Geeks e k sforGeeks sforG
Чтобы узнать больше, обратитесь к статье Ruby Strings.
Рубиновые массивы:
Массив Ruby хранится в смежных ячейках памяти. Он упорядочен по позициям с целочисленным индексом. Одномерный массив можно создать с помощью нового метода класса (Array.new) или с помощью буквального конструктора []
Using new class method
Пример 4:
Ruby
# Ruby code implementation for creation of Ruby Arrays # using new method arr = Array . new ( 4 , "GFG" ) puts arr.size # displaying array elements puts "#{arr}" |
Выход:
4 ["GFG", "GFG", "GFG", "GFG"]
Пример 5:
Ruby
# Ruby code implementation for creation of Ruby Strings # Using literal[] method arr = Array [ "a" , "b" , "c" , "d" , "e" , "f" ] # displaying array elements puts "#{arr}" # displaying array size puts "Size of arr is: #{arr.size}" # displaying array length puts "Length of arr is: #{arr.length}" |
Выход:
["a", "b", "c", "d", "e", "f"] Size of arr is: 6 Length of arr is: 6
Мы можем получить один или несколько элементов, используя как положительные, так и отрицательные индексы:
Пример 6:
Ruby
# Ruby code implementation for accessing of Ruby Arrays str = [ "GFG" , "Geeks" , "Ruby" , "Containers" ] # Accessing single array elements puts "Value at index 1: #{str[1]}" # using positive index puts "Value at index -1: #{str[-1]}" # using negative index # Accessing multiple array elements # using positive index range puts "Positive index range [1,2]: #{str[1,2]}" # using negative index range puts "Negative index range [-1,2]: #{str[-1,2]}" |
Выход:
Value at index 1: Geeks Value at index -1: Containers Positive index range [1,2]: ["Geeks", "Ruby"] Negative index range [-1,2]: ["Containers"]
Рубиновые хэши:
Рубиновые хэши — это набор уникальных ключей и их значений, а хеш можно создать с помощью literal[], Hash.new() или try_convert().
Пример 7:
Ruby
# Ruby code implementation for creation of Ruby Hashes # Using literal[] puts "Creation of Hashes using literal[]" p Hash [ "x" , 30 , "y" , 19 ] p Hash [ "x" => 30 , "y" => 19 ] # Using of new method puts "
Creation of Hashes using new" a = Hash . new ( "geeksforgeeks" ) p a[ "x" ] = 40 p a[ "x" ] p a[ "y" ] puts "
Creation of Hashes using try_convert" # Using of try_convert method p Hash .try_convert({ 3 => 8 }) p Hash .try_convert( "3=>8" ) |
Выход:
Creation of Hashes using literal[] {"x"=>30, "y"=>19} {"x"=>30, "y"=>19} Creation of Hashes using new 40 40 "geeksforgeeks" Creation of Hashes using try_convert {3=>8} nil
Мы можем извлекать элементы (значения) с помощью индекса (ключа), который может быть любым (целое число, символ и т. д.).
Пример 8:
Ruby
# Ruby code implementation for accessing of Ruby Hashes a = { "x" => 45 , "y" => 67 } p a[ "x" ] |
Выход:
45
Значение по умолчанию для хэшей равно нулю. Чтобы узнать больше о Ruby Hashes, нажмите здесь.
Рубиновые диапазоны:
Он объявляется с помощью операторов диапазона «..» и «…».
- Оператор «..» включает все переменные в пределах диапазона, а также начальное и конечное значение.
- Оператор «..» включает все переменные в пределах диапазона, а также начальное значение, но не конечное значение.
Пример 9:
Ruby
#Ruby code to show ranges in Ruby # This will separate the values by comma "," $, = ", " #This include 5 & 10 r1 = ( 5 .. 10 ).to_a #This include 5 but not 10 r2 = ( 5 ... 10 ).to_a #This include "asa" & "asd" r3 = ( "asa" .. "asd" ).to_a #This include "asa" but not "asd" r4 = ( "asa" ... "asd" ).to_a puts "#{r1}" puts "#{r2}" puts "#{r3}" puts "#{r4}" |
Выход:
[5, 6, 7, 8, 9, 10] [5, 6, 7, 8, 9] ["asa", "asb", "asc", "asd"] ["asa", "asb", "asc"]
Мы можем использовать эти диапазоны как последовательности, условия и интервалы. Чтобы узнать больше о Ruby Ranges, нажмите здесь.
Блоки
Блок — это последовательность кода ruby, заключенная в do/end или фигурные скобки. Методы могут принимать неявный аргумент блока и вызывать код в этом блоке с помощью ключевого слова yield.
Пример 10:
Ruby
# Ruby code implementation for creation of Ruby Blocks def two_times yield yield end two_times {puts "GFG!" }; |
Выход:
GFG! GFG!
Блоки как замыкания:
Блоки могут принимать аргумент:
>> def times yield("fir") yield("sec") end => nil >> times {|n| puts "#{n}: yoo"} GFG! Rocks GFG! is the best => nil
Пример 11:
Ruby
# Ruby code implementation for creation of Ruby Blocks as Closures def times yield ( "Rocks" ) yield ( "is the best" ) end times {|ys| puts "GFG! #{ys}" } |
Выход:
GFG! Rocks GFG! is the best
Yield возвращает результат выполнения блока:
Пример 12:
Ruby
# Ruby code implementation for # creation of Ruby Blocks as Closures def gfg [ yield ( "GEEKS" ), yield ( "FOR" ), yield ( "GEEKS" )] end gfg {|geek| puts "#{geek.upcase.reverse}" } |
Выход:
SKEEG ROF SKEEG
Блок закрытия может быть определен в одной области видимости и может быть вызван в другой области видимости. Чтобы узнать больше о замыканиях в Ruby, нажмите здесь.
Больше применений блоков:
Блоки используются многими другими способами:
Пример 13:
Ruby
# Ruby code implementation for # Ruby Blocks using each method [ "Geeks" , "GFG" , 55 ]. each do |n| puts n end |
Выход:
Geeks GFG 55
По умолчанию:
Ruby
# Ruby code implementation for # Ruby Blocks using times method x = "NULL" 4 .times do |x| puts "Value Inside the block: #{x}" end puts "Value Outside the block: #{x}" |
Выход:
Value Inside the block: 0 Value Inside the block: 1 Value Inside the block: 2 Value Inside the block: 3 Value Outside the block: NULL
Чтобы узнать больше о Ruby Blocks, нажмите здесь.