Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 是否存在与自定义';类变量';?(红宝石)_Ruby_Scope_Class Variables - Fatal编程技术网

Ruby 是否存在与自定义';类变量';?(红宝石)

Ruby 是否存在与自定义';类变量';?(红宝石),ruby,scope,class-variables,Ruby,Scope,Class Variables,我使用散列来存储代码中的设置。我想知道是否可以为@profile散列的类的所有实例提供类似于类变量的内容。因此,下面的两个配置文件的常规配置文件变量都等于这两个配置文件。我希望解决方案使用hash @profile = { "vB4Discussions" => { #profile name "urls" => ["vB4 General Discussions"], "process?" => false, "type" =>

我使用散列来存储代码中的设置。我想知道是否可以为@profile散列的类的所有实例提供类似于类变量的内容。因此,下面的两个配置文件的常规配置文件变量都等于这两个配置文件。我希望解决方案使用hash

@profile = {
  "vB4Discussions" => {    #profile name
     "urls"  => ["vB4 General Discussions"],
     "process?" => false,
     "type" => 'Discussion'
   },
  "vB4Design".downcase => {          #profile name      
     "urls"  => ["vB4 Design and Graphics Discussions"],
     "process?" => false,
      "type" => 'Design'
   }
} 

一种方法是对公共位使用常量,如下所示:

#!/usr/bin/ruby1.8

require 'pp'

COMMON_PROFILE = {
  "urls"  => ["vB4 General Discussions"],
  "process?" => false,
  "type" => 'Discussion'
}

@profile = {
  "vB4Discussions" => COMMON_PROFILE,
  "vB4Design".downcase => COMMON_PROFILE,
}

pp @profile

# => {"vB4Discussions"=>
# =>   {"vB4Discussions"=>
# =>     {"urls"=>["vB4 General Discussions"],
# =>      "process?"=>false,
# =>      "type"=>"Discussion"}},
# =>  "vb4design"=>
# =>   {"vB4Discussions"=>
# =>     {"urls"=>["vB4 General Discussions"],
# =>      "process?"=>false,
# =>      "type"=>"Discussion"}}}

一种方法是对公共位使用常量,如下所示:

#!/usr/bin/ruby1.8

require 'pp'

COMMON_PROFILE = {
  "urls"  => ["vB4 General Discussions"],
  "process?" => false,
  "type" => 'Discussion'
}

@profile = {
  "vB4Discussions" => COMMON_PROFILE,
  "vB4Design".downcase => COMMON_PROFILE,
}

pp @profile

# => {"vB4Discussions"=>
# =>   {"vB4Discussions"=>
# =>     {"urls"=>["vB4 General Discussions"],
# =>      "process?"=>false,
# =>      "type"=>"Discussion"}},
# =>  "vb4design"=>
# =>   {"vB4Discussions"=>
# =>     {"urls"=>["vB4 General Discussions"],
# =>      "process?"=>false,
# =>      "type"=>"Discussion"}}}

您知道当找不到密钥时,哈希可以调用一个特殊的过程吗

这可以很好地用在这里

require "backports"  # Needed in Ruby 1.8.6
SETTINGS = {
  "default" => {
    "urls"  => [],
    "process?" => false,
    "type" => 'Discussion'
  },
  "vB4Discussions" => {
    "urls"  => ["vB4 General Discussions"],
  },
  "vB4Design".downcase => {
    "urls"  => ["vB4 Design and Graphics Discussions"],
    "type" => 'Design'
  }
}

# Use defaults 
SETTINGS["vb4design"].default_proc = lambda{|h, k| SETTINGS["default"][k]}
SETTINGS["vB4Discussions"].default_proc = lambda{|h, k| SETTINGS["default"][k]}

# Now the defaults are used if needed:
SETTINGS["vB4Discussions"]["type"]  # ==> 'Discussion'
SETTINGS["vB4Discussions"]["process?"]  # ==> false

# Defaults can be edited later:
SETTINGS["default"]["process?"] = true
SETTINGS["vB4Discussions"]["process?"]  # ==> true
SETTINGS["vb4design"]["process?"]  # ==> true

# Specific value can be changed too
SETTINGS["vb4design"]["process?"] = false # ==> true
SETTINGS["vB4Discussions"]["process?"] # ==> true
注意:除非您有使用字符串的正当理由,否则您应该为键使用符号(即
:vB4Discussions
,而不是
“vB4Discussions”

Hash.default\u proc=
对于Ruby 1.8.7来说是新的,因此您需要
要求“backport”
来使用它。如果您不想这样做,您可以在创建Hash时指定默认过程,如下所示:

DEFAULTS = {
  "urls"  => [],
  "process?" => false,
  "type" => 'Discussion'
}

SETTINGS = {
  "default" => DEFAULTS,
  "vB4Discussions" => Hash.new{|h, k| DEFAULTS[k]}.merge!{
    "urls"  => ["vB4 General Discussions"],
  },
  "vB4Design".downcase => Hash.new{|h, k| DEFAULTS[k]}.merge!{
    "urls"  => ["vB4 Design and Graphics Discussions"],
    "type" => 'Design'
  }
}

您知道当找不到密钥时,哈希可以调用一个特殊的过程吗

这可以很好地用在这里

require "backports"  # Needed in Ruby 1.8.6
SETTINGS = {
  "default" => {
    "urls"  => [],
    "process?" => false,
    "type" => 'Discussion'
  },
  "vB4Discussions" => {
    "urls"  => ["vB4 General Discussions"],
  },
  "vB4Design".downcase => {
    "urls"  => ["vB4 Design and Graphics Discussions"],
    "type" => 'Design'
  }
}

# Use defaults 
SETTINGS["vb4design"].default_proc = lambda{|h, k| SETTINGS["default"][k]}
SETTINGS["vB4Discussions"].default_proc = lambda{|h, k| SETTINGS["default"][k]}

# Now the defaults are used if needed:
SETTINGS["vB4Discussions"]["type"]  # ==> 'Discussion'
SETTINGS["vB4Discussions"]["process?"]  # ==> false

# Defaults can be edited later:
SETTINGS["default"]["process?"] = true
SETTINGS["vB4Discussions"]["process?"]  # ==> true
SETTINGS["vb4design"]["process?"]  # ==> true

# Specific value can be changed too
SETTINGS["vb4design"]["process?"] = false # ==> true
SETTINGS["vB4Discussions"]["process?"] # ==> true
注意:除非您有使用字符串的正当理由,否则您应该为键使用符号(即
:vB4Discussions
,而不是
“vB4Discussions”

Hash.default\u proc=
对于Ruby 1.8.7来说是新的,因此您需要
要求“backport”
来使用它。如果您不想这样做,您可以在创建Hash时指定默认过程,如下所示:

DEFAULTS = {
  "urls"  => [],
  "process?" => false,
  "type" => 'Discussion'
}

SETTINGS = {
  "default" => DEFAULTS,
  "vB4Discussions" => Hash.new{|h, k| DEFAULTS[k]}.merge!{
    "urls"  => ["vB4 General Discussions"],
  },
  "vB4Design".downcase => Hash.new{|h, k| DEFAULTS[k]}.merge!{
    "urls"  => ["vB4 Design and Graphics Discussions"],
    "type" => 'Design'
  }
}

我明白了,这花了我一些时间,但我明白了:-)是的,这是一种可能的方法。让我们看看其他人是否能想到其他方法…谢谢你。请记住,只有在你不会动态更改配置的情况下,此解决方案才是好的。要找出原因,请创建此哈希,修改其中一个配置:@profile['VB4Discussions'][“类型”]='chit chat',然后打印散列。当你理解了你看到的内容后,你就会知道一些重要的事情。你是说修改公共位会影响所有配置文件吗?在我看来,我会使用你的想法,但会以稍微修改的方式。我会向所有配置文件添加新的公共配置文件散列。是的,这就是我的意思。你是远远超过我。我希望我是:-))))))))))我喜欢你的解决方案,它已经实现并运行。虽然有点不同。我也喜欢下面的解决方案。我明白了,这花了我一些时间,但我明白:-)是的,这是一种可能的方法。让我们看看其他人是否能想到其他方法…谢谢你。记住,只有在你不改变配置的情况下,这个解决方案才是好的要找出原因,请创建此哈希,修改其中一个配置:@profile['VB4Discussions']['type']='chit chat',然后打印散列。当你理解了你看到的内容后,你就会知道一些重要的事情。你是说修改公共位会影响所有配置文件吗?在我看来,我会使用你的想法,但会以稍微修改的方式。我会向所有配置文件添加新的公共配置文件散列。是的,这就是我的意思。你是远远超过我。我希望我是:-‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘)我喜欢你的解决方案,它已经实施并正在运行。不过有点不同。我也喜欢下面的解决方案。@Marc Andre Lafortune:非常有趣的概念。肯定回答了我的问题。遗憾,我不能使用“接受”两次。@Marc Andre Lafortune:非常有趣的概念。肯定回答了我的问题。遗憾我不能用“接受”两次。