【发布时间】:2015-10-27 22:31:02
【问题描述】:
我有一个传递给OpenStruct 的哈希值,以便使用. 使其成为单词。这完美地工作。但是,当我尝试访问不存在的密钥时,undefined method <unknown key> for #<Hash:0x7f24ea884210> (NoMethodError) 会被提出。我怎样才能让它返回nil?
如果我使用原始哈希尝试相同的操作,我会得到nil,但不会使用OpenStruct!!
程序中的sn-p:
TXT_HASH = load_data("test.txt")
pp TXT_HASH[:ftp][:lastname] ## print nil as lastname does not exist
TXT = OpenStruct.new(TXT_HASH)
pp TXT.ftp.lastname ## raises NoMethodError ## Can it return nil?
【问题讨论】:
-
你能展示你目前拥有的东西吗?
-
@squiguy 我添加了一个小sn-p。看看是否正常
-
如何让它返回 nil? 通过捕获代码中的错误并返回 nil。 OpenStruct 不会返回 nil,无论你多么想要它。 如果我用原始哈希尝试同样的事情,我会得到 nil,但使用 OpenStruct 不会!! 你理解 OpenStruct 是一个哈希吗?因为不是。仅仅因为一个类有一个实例变量是一个 Hash 并不意味着该类是一个 Hash。
-
好的,我明白你的意思,但如果我将
TXT发送到其他程序。当我尝试访问其中的值时,我会发现这个错误!!?我想避免这种情况。有没有办法覆盖 OpenStruct 的 getter 函数??
标签: ruby nomethoderror