PHP ассоциативные массивы в Ruby - PullRequest
0 голосов
/ 24 июня 2011

В php я могу сделать это:

$access = array();
$access['drivers']['create'] = 'administrator';
$access['drivers']['view']   = 'user';

echo $access['drivers']['view'];  # => 'user'

Как я могу сделать это в Ruby?

Ответы [ 5 ]

2 голосов
/ 24 июня 2011

Стоит отметить, что в соглашении часто используется :symbols вместо "strings"

access[:drivers][:view]

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

2 голосов
/ 24 июня 2011

Ты имеешь в виду что-то подобное?

#!/usr/bin/env ruby

access = Hash.new
access['drivers'] = Hash.new
access['drivers']['create'] = 'administrator'
access['drivers']['view']   = 'user'

puts access['drivers']['view']  # => 'user'
2 голосов
/ 24 июня 2011

С хешем.

access = Hash.new # or {}
access["drivers"] = {}
access["drivers"]["view"] = 'user'

Вы можете использовать массив в качестве ключа, если хотите.

access = Hash.new
access["drivers", "view"] = "user"
1 голос
/ 24 июня 2011

Вы можете использовать блочную форму Hash.new для предоставления пустого хэша в качестве значения по умолчанию:

h = Hash.new { |h,k| h[k] = { }; h[k].default_proc = h.default_proc; h[k] }

И тогда это происходит:

>> h[:this][:that] = 6
# h = {:this=>{:that=>6}}
>> h[:other][:that] = 6
# {:this=>{:that=>6}, :other=>{:that=>6}}
>> h[:thing][:that] = 83724
# {:this=>{:that=>6}, :other=>{:that=>6}, :thing=>{:that=>83724}}

Забавный default_proc материал в блоке разделяет блок генерации значений основного хеша по умолчанию с подхешами, так что они тоже автоматически оживляются.

Кроме того, убедитесь, что выне делайте этого:

h = Hash.new({ })

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

0 голосов
/ 02 ноября 2011

Из вопроса неясно, нужно ли вам действительно обновлять структуру. Я бы написал так:

access = {
  :drivers => {
    :create => "administrator",
    :view => "user",
  },
}

access[:drivers][:view] #=> 'user'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...