【问题标题】:What is the point of using the 'to_sym' method?使用“to_sym”方法有什么意义?
【发布时间】:2019-11-10 13:44:20
【问题描述】:

我正在尝试构建一个石头剪刀布游戏,在查看其他人的代码时,我注意到有些人正在使用“to_sym”。它们有一个散列,一个字符串作为键,一个数组有两个字符串元素作为键。我试图弄清楚他们为什么会这样做,但我迷路了。

例子:

WIN_CONDITIONS = { rock: ["lizard", "scissors"],
                   paper: ["rock", "spock"],
                   scissors: ["paper", "lizard"],
                   lizard: ["paper", "spock"],
                   spock: ["scissors", "rock"]
                  }

def win?(first, second)
  WIN_CONDITIONS[first.to_sym].include?(second)
end

【问题讨论】:

  • 作为一种跟进,为什么有人要使用符号?为什么不直接使用字符串?通常,当您需要“类似字符串”但它应该是 CODE 而不是 DATA 的一部分时,首选符号。它们是不可变的(无法更改它们,这可以在很多方面保护您),内存中只有一个副本(与创建和丢弃的字符串不同),并且它们通常是非常好的标识符。跨度>
  • 感谢您提供的信息!

标签: ruby methods symbols


【解决方案1】:

用字符串作为键

这就是你错的地方。那些是符号。因此,如果您希望正确查找该值,则需要.to_sym

【讨论】:

  • 那么它在哪里说[first.to_sym].include?(第二个),什么是'first',符号键和'second'是数组本身?抱歉,我对编程很陌生,我对这些东西感到不安。
  • @Felicia WIN_CONDITIONS[first.to_sym] 为您提供一系列获胜动作。然后你在那个数组上调用include?,看看这个特定的移动(second)是否存在。
  • 感谢@Sergio,这对您有很大帮助。
猜你喜欢
  • 2011-05-03
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
  • 1970-01-01
  • 1970-01-01
  • 2014-05-05
相关资源
最近更新 更多