Многократная инициализация авививилизационных хешей с использованием нового оператора в Ruby - PullRequest
1 голос
/ 02 июля 2010

Я хотел бы инициализировать несколько автоматически оживляющих хешей выражением в одну строку. До сих пор я пришел к дополнительному методу для объекта AutoHash:

class AutoHash < Hash
  ...
  def few(n=0)
    Array.new(n) { AutoHash.new }
  end

, что позволяет мне сделать следующее

a, b, c = AutoHash.new.few 3

Однако я чувствую, что можно сделать следующее предложение, определив новый оператор :=

a := b := c = AutoHash.new

Не могли бы вы помочь мне реализовать это?


Нужно ли использовать суператоры ?

require 'superators'

class AutoHash < Hash
  ...
  superator ":=" do |operand|
    if operand.kind_of? Hash
      ...
    else
      ...
    end
  end

Обновление: Теперь я вижу, что оператор должен быть определен вне класса. Можно ли определить такой объект-оператор клонирования?


Обновление2 Более четкое определение метода few, благодаря Джошуа


Ссылки

  1. http://www.linux -mag.com / кэш / 7432 / 1.html
  2. Поддерживает ли Ruby ссылки на var, такие как PHP?
  3. http://ruby.about.com/od/advancedruby/a/deepcopy.htm

1 Ответ

1 голос
/ 02 июля 2010

Где вы просите a := b := c := AutoHash.new.few 3 Я думаю (не уверен, что понимаю ваше желание), что вы действительно хотите a,b,c=Autohash.new.few 3


Почему немногие принимают переменные аргументы, когда вы используете только первое?

Я также считаю, что ваше создание возвращаемого значения сбивает с толку, может быть, попробуйте

def few(n=0) 
  Array.new(n) { AutoHash.new } 
end 

Кроме того, похоже, что few должен быть методом класса. a,b,c=AutoHash.few 3, который будет работать, если вы определили несколько в классе:

def AutoHash.few(n=0)
  Array.new(n) { AutoHash.new }
end

Если a,b,c=AutoHash.few 3 не то, что вы ищете, и вы действительно хотите реализовать свой собственный оператор, тогда посмотрите Взлом parse.y , который выступление на RubyConf 2009. Вы можете посмотреть презентацию на http://rubyconf2009.confreaks.com/19-nov-2009-17-15-hacking-parsey-tatsuhiro-ujihisa.html и слайды на http://www.slideshare.net/ujihisa/hacking-parsey-rubyconf-2009

...