是否有一种将“数组地址”传递给方法的好方法?

时间:2016-10-27 19:32:30

标签: ruby store

我如何重构以下内容?我有一些值存储在我的YAML文件中作为嵌套数组,但我想将所有事务拉成两个get和set方法。这有效,但显然是有限和笨重的。感觉不对。

module Persistance
  @store = YAML::Store.new('store.yml')

  def self.get_transaction(key)
    @store.transaction { @store[key] }
  end

  def self.get_nested_transaction(key, sub)
    @store.transaction { @store[key][sub] }
  end
end

奖励积分:我还有一个额外的方法来增加我的YAML文件中的值。有没有进一步的方法来重构这段代码?将块传递给单个数据库访问方法是否有意义?

1 个答案:

答案 0 :(得分:1)

嘿,我记得刚刚练习PStore的时候我正在考虑这个问题。我当时没有想出一个有效的方法,但我现在设法得到一个。顺便说一下,yaml / store非常酷,你可以把它归功于我。

无论如何,关于代码。基本上这里有几个重要的概念:

  • LANG=de_DE.UTF-8 LANGUAGE= LC_CTYPE="de_DE.UTF-8" LC_NUMERIC="de_DE.UTF-8" LC_TIME="de_DE.UTF-8" LC_COLLATE="de_DE.UTF-8" LC_MONETARY="de_DE.UTF-8" LC_MESSAGES="de_DE.UTF-8" LC_PAPER="de_DE.UTF-8" LC_NAME="de_DE.UTF-8" LC_ADDRESS="de_DE.UTF-8" LC_TELEPHONE="de_DE.UTF-8" LC_MEASUREMENT="de_DE.UTF-8" LC_IDENTIFICATION="de_DE.UTF-8" LC_ALL= 类似于哈希,因为您可以使用@store[],但它实际上不是哈希值,而是[]=
  • Ruby 2.3有一个方法Hash#dig,这是一个缺少的拼图块。您提供了一个键列表,它将每个键视为连续键。您可以对YAML::Storeget使用此功能,我的代码显示为
  • 如果set是真正的哈希,那将是它的结尾但不是,所以对于这个答案,我添加了一个@store方法,其使用方法与原始方法相同。
YAML::Store#dig