初始化所有哈希有一个default_proc

我想扩展散列类,以便所有的哈希值获得同样的default_proc正在创建时。 所以我把这个在我的文件:

class Hash def initialize self.default_proc = proc { |hash, key| raise NameError, "#{key} is not allowed" } end end

这工作得很好,如果我使用这个语法

h = Hash.new

但如果我使用

h = {}

玩它,似乎后者的语法不调用初始化。 是否有一个“铁一般”的方式来实现设置default_proc所有哈希?

--------------解决方案-------------

我想你可以只拦截[]

class Hash
alias realGet []
def [](x)
t = realGet(x)
if t == nil
puts 'intercepted'
end
t
end
end

是的{}将不会调用initialize方法,因为你不能传递一个块{}

# This will issue an error
h = {}{#some block code}

但是,您还可以通过阻止新的方法:

h = Hash.new { |hash, key| raise NameError, "#{key} is not allowed" }

分类:红宝石 时间:2012-01-01 人气:0
本文关键词: 红宝石,散列,初始化
分享到:

相关文章

  • 通过符号红宝石散列访问不工作 2012-12-16

    创建控制器规范,看起来像这样需要'spec_helper" describe UsersController do it "redirects to user and creates cookie" do post :create, user: FactoryGirl.attributes_for(:user) expect(response.cookies[:remember_token]).to eq(User.last.remember_token) response.

  • 转换红宝石散列成C ++地图 2012-03-25

    有没有一种方法来转换红宝石制成一个C ++映射的哈希? 我试着打印散列成一个文件,但我不知道如何把它读入一个C ++的地图. 散列打印在以下方式: stringA => 123 234 345 456 567 stringB => 12 54 103 313 567 2340 ... 号的量为每个相关联的琴弦而变化,并且该字符串是唯一的. 我想用: std::map<std::string,std::vector<unsigned int>> stringMap; 我怎

  • 红宝石散列错误:未定义的方法[] 2012-05-25

    我有一段这样的代码: my_hash = {} first_key = 1 second_key = 2 third_key = 3 my_hash[first_key][second_key][third_key] = 100 和Ruby解释器给了我一个错误说: 未定义的方法`[]'的零:NilClass(NoMethodError) 因此,是否意味着我不能使用哈希这样呢? 或者你认为这个错误可能是因为别的什么? --------------解决方案------------- 哈希默认情况下不

  • 什么办法让红宝石散列和/或阵列的名称或者姓名 2012-07-27

    所以,非常简单的,但我不能找到答案. 说我有YAML倾倒这样的对象: page: page_url: http://www.stackoverflow.com/ created_at: "2011-08-10T11:00:19Z" website_id: 1 updated_at: "2011-08-10T11:00:19Z" id: 1 Hash 我知道从它的哈希使用的.class并且该标题是页的转储. 像通常那样我可以引用任何的按键. 如何在地球上你得到的散列值

  • 如何将字符串转换为整数时,我尝试访问JSON转换红宝石散列数据? 2012-07-28

    我在JSON转换的数据散列并试图访问数据. 我用下面的代码: require 'yajl' json=File.new('5104.txt', 'r') parser=Yajl::Parser.new hash=parser.parse(json) puts hash['response']['venue']['id'] puts hash['response']['venue']['name'] puts hash['response']['venue']['categories']['par

  • 红宝石散列.DEFAULT设置到一个列表 2013-09-17

    我想我明白了默认的方法做一个哈希... 给一个键的默认值,如果它不存在: irb(main):001:0> a = {} => {} irb(main):002:0> a.default = 4 => 4 irb(main):003:0> a[8] => 4 irb(main):004:0> a[9] += 1 => 5 irb(main):005:0> a => {9=>5} 都好. 但是,如果我设置默认是一个空列表,或空哈希,我不明白它

  • 可以检索元素的属性在红宝石散列,但不是元素本身 2014-11-28

    我在与检索从哈希元素巨大的问题node_hash在下面的代码. 散列包含一个系统树的节点,从这里提供的数据构建的. 每个节点具有唯一的ID,它是散列的密钥. 当我尝试访问哈希如的元素, node_hash[10]林心如只是旋转的车轮,无法恢复. 但是,如果我做类似node_hash[10].name返回名字. 我知道正确的关系正在建立,因为我可以这样做 node_hash[1].children.each do |child| puts child.name end 我得到的预期输出 root

  • 有没有办法通过散列初始化对象? 2015-02-02

    如果我有这个类: class A attr_accessor :b,:c,:d end 此代码: a = A.new h = {"b"=>10,"c"=>20,"d"=>30} 是否有可能直接从哈希初始化对象,没有我需要去每对,并呼吁instance_variable_set 就像是: a = A.new(h) 这应该引起每个实例变量被初始化到一个具有在散列相同的名称. --------------解决方案-----------

  • 红宝石散列其键是对象的一个​​功能? 2013-06-04

    例如, s1 = Student.new(1, "Bob", "Podunk High") hash[1] = s1 puts hash[1].name #produces "Bob" s1.id = 15 puts hash[15].name #produces "Bob" puts hash[1].name #fails 这不是哈希般准确的行为,并插入了错误的关键还是需要加以界定. 虽然我当然可以推出自己的容器,这种行为方

  • 如何循环只在红宝石散列一个特定值的位置? 2015-01-26

    我知道所有的第一个值@@logHash键包含IP地址. 我只想重复这一立场为,如果它不是一个重复键一个新的哈希创建关键点. 这里是我有什么,但我知道这不可能是正确的? def ipaddresses(@@logHash) @@ipHash = Hash.new @@logHash[1].each_value do | value | if @@ipHash.has_key?(value) @@ipHash[value] += "#" else @@ipHash[value] = &qu

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.514 (s). 10 q(s)