【问题标题】:how to compare method input parameter value with hash如何将方法输入参数值与哈希进行比较
【发布时间】:2017-08-25 19:11:10
【问题描述】:

我有以下方法

def method(value)
hash = {a: 'abc', b: 'bde'}

get_value = hash.send(value)

end

如何将输入参数值与哈希键进行比较并将该键值分配给get_value

编辑:所以如果输入值为a 与散列比较,将其值abc 分配给get_value

【问题讨论】:

  • 以什么方式比较valuehash?只是为了检查它们是否相等?如果是这样,那就是get_value = hash == value。但如果这就是你正在做的,那么变量名get_value 就没有意义了。所以我不确定你想让代码做什么。
  • 将输入值与哈希的key进行比较,并将key值赋给get_value
  • 不确定你在问什么。也许get_value = hash[value]
  • 更新问题
  • 对于像检索哈希值这样微不足道的事情,您不需要方法。 {a: 'abc', b: 'bde'}[:a]

标签: ruby ruby-on-rails-4


【解决方案1】:

你可以只使用哈希的普通#[]方法来提取值,

def do_something(value)
  hash = { a: 'abc', b: 'bde' }

  get_value = hash[value]
end

如果你想在他们传递一个错误的密钥时出错,你可以使用fetch

def do_something(value)
  hash = { a: 'abc', b: 'bde' }

  get_value = hash.fetch(value)
end

最后,如果没有找到密钥,fetch 可以采用默认值,而不是出错:

def do_something(value)
  hash = { a: 'abc', b: 'bde' }

  get_value = hash.fetch(value, 'key not found')
end

在所有这些中,请确保您传递的是哈希的确切键,在您的示例中,您的哈希键是符号,因此您需要传递:

do_something(:a)

而不是

do_something('a')

【讨论】:

  • 谢谢。我试图做 def 方法(:值),但让你意想不到的 tokin tSYMBOL 错误
  • 你没有用符号定义方法,你用符号调用它
  • 我明白了。所以当我放 byebug 并且如果我做 hash[:value] 我得到零。 value 返回“abc”,hash[:a] 给出“abc”。知道有什么问题吗?
  • @User7354632781 value 是包含:a:b 等符号的变量。但是你写了:value,这是文字符号:value。你需要写hash[value],没有:
  • 对不起,如果我做 hash[value] 它会返回 nil
猜你喜欢
  • 1970-01-01
  • 2015-05-13
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
  • 2016-03-06
  • 2013-12-21
相关资源
最近更新 更多