0

我正在使用初始化程序目录中的一个文件来声明用于应用程序不同部分的常量。

FIRST_STR = "First Name"
LAST_STR = "Last Name"
new_user_hash = Hash.new
new_user_hash[ "first" ] = FIRST_STR
new_user_hash[ "last" ] =  LAST_STR

FIRST_STR我在应用程序的不同部分使用和没有问题LAST_STR,但是当我尝试使用new_user_hash,我收到以下错误消息:

#<#:0x007f8da5752da0> 的未定义局部变量或方法“new_user_hash”

是否不可能在一个文件中定义/声明哈希并在另一个文件中使用它?

4

2 回答 2

7

我认为您可能遇到了范围界定——<code>new_user_hash 是本地的,可能对应用程序的其余部分不可用。如果您将其设为全局(通过调用它$new_user_hash),它将可用。在 和 的情况下FIRST_STRLAST_STR它们是有效的全局常量。

将您的代码更新为:

$new_user_hash = { "first" => FIRST_STR, "last" => LAST_STR }

或者

NEW_USER_HASH  = { "first" => FIRST_STR, "last" => LAST_STR }

而且您将能够访问$new_user_hashNEW_USER_HASH从您的应用程序的其他部分。

另一种策略是定义一个模块:

module MyAppConfig
  NEW_USER_HASH = { "first" => FIRST_STR, "last" => LAST_STR } 
end

然后在其他地方你可以通过在它前面加上模块名称来访问它:

MyAppConfig::NEW_USER_HASH["first"]

这是一种更被接受的方法,因为它不会创建更多的全局变量。

于 2012-05-12T16:51:14.560 回答
0

您应该使用配置管理 gem:https ://www.ruby-toolbox.com/categories/Configuration_Management

于 2012-05-12T21:38:22.993 回答