代码之家  ›  专栏  ›  技术社区  ›  Chirantan

如果我们在一个动作中将参数缓存到一个局部变量中,它会有帮助吗?

  •  2
  • Chirantan  · 技术社区  · 16 年前

    所以我们运行一个代码质量工具 reek 偶尔作为我们项目的一部分。该工具主要查找代码气味并报告它们。在这里,我们观察到每次尝试访问一个密钥时都会闻到“重复”的味道。 params 不止一次(就好像我们用相同的参数进行两次方法调用,或者我们正在复制一个if条件等)。然而, 帕拉姆 只是一个 Hash 对吧?其他哈希在多次访问它们的密钥时不会闻到重复的味道。

    为什么会这样?是什么 帕拉姆 确切地?缓存有意义吗 帕拉姆 在局部变量中使用它们?它会有帮助还是一样?或者工具有问题吗?救命!

    4 回复  |  直到 16 年前
        1
  •  3
  •   kevinrutherford    16 年前

    对于当前版本,最好只在app/models文件夹中运行reek,因为它会对视图和控制器产生误报。

    参数是一种接近系统边界的DTO(数据传输对象),其特性应不同于常规代码。但里克还不知道。我计划在不远的将来改进Reek,以便它在Rails中发挥更好的作用。不过,现在最好的办法是将其限制在查看应用程序/模型(可能还有应用程序/助手和lib)。

        2
  •  2
  •   Omar Qureshi    16 年前

    params是一个方法调用,它执行 @params ||= @request.params

    可能它认为params是一个复杂的方法,所以它希望您尝试将其缓存在一个变量中,但是,不认为这是值得的,特别是因为它是memoid(基于我的Rack_Process.rb,来自Rails 2.2)

        3
  •  0
  •   mutle    16 年前

    params[:foo] 是对的方法调用 Hash#[] 所以Reek是正确的。我不熟悉reek,所以我不知道为什么其他散列访问的计数不一样。 散列 应该足够快,这样您就不需要将它存储在局部变量中,除非您的代码处于非常关键的性能部分。

    参数散列和常规散列之间的唯一区别是它使用 with_indifferent_access ,这意味着您可以使用字符串或符号访问任何键。

        4
  •  0
  •   raghubetter    16 年前

    我相信每次调用参数时,都会有一个初始化步骤来生成方法调用,我想您可以尝试创建一个参数并检查调用的数量。 这可能是盲目的猜测。-)

    推荐文章