kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 Tilendor
Tilendor
Вопрос

Что означают различные скобки в Ruby?

В Ruby какая разница между {} и []?

Похоже, что {} используется как для блоков кода, так и для хэшей.

А [] используются только для массивов?

Документ не очень понятен.

83 2008-08-15T18:09:52+00:00 6
the  Tin Man
the Tin Man
Редактировал вопрос 4-го декабря 2014 в 5:32
Программирование
ruby
syntax
Решение / Ответ
Orion Edwards
Orion Edwards
17-го августа 2008 в 9:17
2008-08-17T21:17:44+00:00
Дополнительно
Источник
Редактировать
#8416173

Это зависит от контекста:

  1. При самостоятельном использовании или присвоении переменной [] создает массивы, а {} - хэши. например.

     a = [1,2,3] # массив
     b = {1 => 2} # хэш
  2. [] может быть переопределен как пользовательский метод и обычно используется для получения данных из хэшей (стандартная библиотека устанавливает [] как метод для хэшей, который является тем же самым, что и fetch)
    Существует также соглашение, что он используется как метод класса, так же, как вы можете использовать статический метод Create в C# или Java. например.

     a = {1 => 2} # создаем хэш для примера
     puts a[1] # то же самое, что a.fetch(1), выведет 2
    
     Hash[1,2,3,4] # это метод пользовательского класса, который создает новый хэш

Последний пример смотрите в документах Ruby Hash docs.

  1. Это, пожалуй, самый сложный пример - {} также является синтаксисом для блоков, но только когда передается методу ВНЕ паренса аргументов.

Когда вы вызываете методы без паренсов, Ruby смотрит на то, где вы поставили запятые, чтобы определить, где заканчиваются аргументы (где были бы паренсы, если бы вы их набрали)

    1.upto(2) { puts 'hello' } # это блок
    1.upto 2 { puts 'hello' } # синтаксическая ошибка, ruby не может понять, где заканчиваются аргументы функции
    1.upto 2, { puts 'hello' } # запятая означает "аргумент", поэтому ruby воспринимает его как хэш - это не сработает, потому что puts 'hello' не является правильным хэшем
the  Tin Man
the Tin Man
Редактировал ответ 4-го декабря 2014 в 5:34
70
0
 sris
sris
2-го апреля 2009 в 3:47
2009-04-02T15:47:21+00:00
Дополнительно
Источник
Редактировать
#8416175

Еще один, не столь очевидный, использование [] - это как синоним прок#вызов и метод#вызов. Это может быть немного запутанным в первый раз, когда вы сталкиваетесь его. Я думаю, рациональное за то, что это делает его более похожим на обычный вызов функции.

Е. Г.

proc = Proc.new { |what| puts "Hello, #{what}!" }
meth = method(:print)

proc["World"]
meth["Hello",","," ", "World!", "\n"]
the  Tin Man
the Tin Man
Редактировал ответ 4-го декабря 2014 в 5:36
21
0
John Topley
John Topley
15-го августа 2008 в 6:24
2008-08-15T18:24:06+00:00
Дополнительно
Источник
Редактировать
#8416171

В целом, вы правы. Помимо хэшей, общий стиль таков, что фигурные скобки {} часто используются для блоков, которые могут поместиться в одной строке, вместо того, чтобы использовать do/end в нескольких строках.

Квадратные скобки [] используются в качестве методов класса во многих классах Ruby, включая String, BigNum, Dir и, как ни странно, Hash. Итак:

Hash["key" => "value"]

так же корректно, как и:

{ "key" => "value" }
the  Tin Man
the Tin Man
Редактировал ответ 4-го декабря 2014 в 5:42
9
0
 Evgeny
Evgeny
17-го сентября 2008 в 7:52
2008-09-17T07:52:50+00:00
Дополнительно
Источник
Редактировать
#8416174

Квадратные скобки [ ] используются для инициализации массивов. Документацию по делу инициализатор [ ] в

ri Array::[]

Фигурные скобки { } используются для инициализации хеш. Документацию по делу инициализатора { } в

ri Hash::[]

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

Вы можете открыть список всех классов, которые имеют способ и"[ ]" с определенными с

ri []

большинство методов также есть и "[ ]=" и метод, который позволяет присвоить вещи, например:

s = "hello world"
s[2]     # => 108 is ascii for e
s[2]=109 # 109 is ascii for m
s        # => "hemlo world"

Фигурные скобки могут также использоваться вместо "и вообще ... конец" на блоках, как " { ... } себе".

Другой случай, когда вы можете увидеть квадратные скобки или использовать фигурные скобки - это специальный инициализаторы, где любой символ может быть использован, как:

%w{ hello world } # => ["hello","world"]
%w[ hello world ] # => ["hello","world"]
%r{ hello world } # => / hello world /
%r[ hello world ] # => / hello world /
%q{ hello world } # => "hello world"
%q[ hello world ] # => "hello world"
%q| hello world | # => "hello world"
3
0
James  A. Rosen
James A. Rosen
15-го августа 2008 в 7:03
2008-08-15T19:03:12+00:00
Дополнительно
Источник
Редактировать
#8416172

несколько примеров:

[1, 2, 3].class
# => Array

[1, 2, 3][1]
# => 2

{ 1 => 2, 3 => 4 }.class
# => Hash

{ 1 => 2, 3 => 4 }[3]
# => 4

{ 1 + 2 }.class
# SyntaxError: compile error, odd number list for Hash

lambda { 1 + 2 }.class
# => Proc

lambda { 1 + 2 }.call
# => 3
2
0
 rogerdpack
rogerdpack
13-го октября 2009 в 9:47
2009-10-13T21:47:50+00:00
Дополнительно
Источник
Редактировать
#8416176

Обратите внимание, что вы можете определить метод [] для ваших собственных классов:

class A
 def [](position)
   # do something
 end

 def @rank.[]= key, val
    # define the instance[a] = b method
 end

end
the  Tin Man
the Tin Man
Редактировал ответ 4-го декабря 2014 в 5:35
2
0
Похожие сообщества 6
Чат по Руби
Чат по Руби
2 350 пользователей
Чат-болталка для учеников руби-школы и не только. Сайт школы: https://rubyschool.us Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-03-13 или тут https://graph.org/Pravila-chata-Rubi-shkoly-03-13
Открыть telegram
RubyRush.ru
RubyRush.ru
2 295 пользователей
Дружелюбный чат для начинающих программистов и учеников rubyrush.ru, обсуждаем программирование, ruby и т. п. Правила чата https://telegra.ph/22-09-05-3 Популярные вопросы (с ответами) https://telegra.ph/22-09-17-4 💎🦜
Открыть telegram
pro.rb (Ruby/Rails / RU)
pro.rb (Ruby/Rails / RU)
1 183 пользователей
Язык программирования Ruby: https://ru.wikipedia.org/wiki/Ruby Вакансии: @rubyjob
Открыть telegram
Ruby — вакансии и аналитика
Ruby — вакансии и аналитика
359 пользователей
Публикуем вакансии и запросы на поиск работы по направлению Ruby. Full-time, part-time, remote и разовые подработки. Обмен инсайдами и аналитикой на рынке труда. Тематическое общение: @ruby_ru См. также: @python_jobs, @nodejs_jobs, @devops_jobs
Открыть telegram
Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
345 пользователей
Открыть telegram
Ruby Talks
Ruby Talks
255 пользователей
Национальная Флеймотека
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Денис Васьков
Зарегистрирован 15 часов назад
2
Dima Patrushev
Зарегистрирован 2 дня назад
3
sirojidddin otaboyev
Зарегистрирован 1 неделю назад
4
Елена Гайдамамакинат
Зарегистрирован 1 неделю назад
5
Иван Степанюк
Зарегистрирован 1 неделю назад
ID
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией