【问题标题】:is there something like 'with_indifferent_access' for arrays usable for include?对于可用于包含的数组,是否有类似“with_indifferent_access”的东西?
【发布时间】:2014-02-16 20:29:46
【问题描述】:

我尝试在我的应用中只使用 :symbols 作为关键词。我尝试在 :symbol => 逻辑或字符串 => UI/特定语言之间做出严格决定

但我也得到了每个 JSON 的一些“值”(即选项等),因为 JSON 中没有 :symbols,所以我调用的所有哈希都具有“with_indifferent_access”属性。

但是:数组有什么相等的吗?像这样

a=['std','elliptic', :cubic].with_indifferent_access

a.include? :std => true

编辑:为标签添加导轨

【问题讨论】:

标签: ruby-on-rails ruby


【解决方案1】:
a = ['std','elliptic', :cubic].map(&:to_sym)
a.include? :std
#=> true

编辑 - 关于 maxigs 的评论可能最好转换为字符串:

a = ['std', 'elliptic', :cubic].map(&:to_s)
a.include? "std"
#=> true

【讨论】:

  • 是的,当然,变红,我会用你的答案,将我得到的数组映射到我的(内部标准)哈希值。 (a={std:true, ....})
  • ['std','elliptic', :cubic].any?{|e| e.to_sym == :std} 会更有效率。
  • 小提示:在动态数据上使用 to_sym 时要小心。垃圾收集器永远不会从内存中清除符号。这可能会导致进程的内存不断增长(又名内存泄漏)
  • 附带说明,在最新的 Ruby 版本中它们是,所以现在使用这两种方法都很好
【解决方案2】:

tl;博士

['std','elliptic', :cubic].flat_map { |s| [s.to_sym, s.to_s] }

多次使用 Rails,我将验证是否包含在数组中。我也喜欢使用符号。它可能看起来像这样:

validates :source, inclusion: { in: [:source1, :source2] }

当我第一次使用符号创建对象时这可能是有效的,但是当它从数据库中读取source 并返回一个字符串时它变得无效。我可以修补 getter 以始终返回符号,但我宁愿不这样做。相反,我这样做:

validates :source, inclusion: { in: [:source1, :source2].flat_map { |s| [s, s.to_s] } }

【讨论】:

    猜你喜欢
    • 2011-12-04
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    相关资源
    最近更新 更多