【问题标题】:Improve readability of large attr_accessor提高大 attr_accessor 的可读性
【发布时间】:2013-02-26 18:15:19
【问题描述】:

定义非常大的常量或attr_accessor符号时应该怎么做?例如,像这样:

ATTRIBUTES = %w(id name full_name owner private html_url description fork url forks_url keys_url collaborators_url teams_url hooks_url issue_events_url events_url assignees_url branches_url tags_url blobs_url git_tags_url git_refs_url trees_url statuses_url languages_url stargazers_url contributors_url subscribers_url subscription_url commits_url git_commits_url comments_url issue_comment_url contents_url compare_url merges_url archive_url downloads_url issues_url pulls_url milestones_url)

attr_accessor :name, :login, :full_name, :owner, :private, :html_url, :description, :fork, :url

在课堂上是可怕的。这是最好的方法吗?我想知道是否有其他方法可以提高可读性。

【问题讨论】:

  • 如果您对如何清理它感兴趣,应该在codereview.stackexchange.com 上询问。如果它不工作 StackOverflow 是正确的地方。

标签: ruby coding-style readability human-readable


【解决方案1】:

按一定宽度换线:

ATTRIBUTES = %w[
  id name full_name owner private html_url description fork url forks_url
  keys_url collaborators_url teams_url hooks_url issue_events_url events_url
  ...
]

或者如果您不需要保存行,则将每个项目放在单独的行上可能很容易:

ATTRIBUTES = %w[
  id name
  full_name
  owner
  private
  html_url
  ...
]

或者如果您有时间格式化,那么您可能想要制作几列并对齐它们:

ATTRIBUTES = %w[
  id                 name                full_name          owner             
  private html_url   description fork    url                forks_url
  keys_url           collaborators_url   teams_url          hooks_url
  issue_events_url   events_url          ...
]

在 Ruby 2.0 中,为符号数组引入了新的文字表达式 %i[...]

attr_accessor *%i[
  name
  login
  full_name
  owner
  private
  ...
]

【讨论】:

【解决方案2】:

您可以使用YAML 文件或设置配置文件。然后在初始化的时候,就可以赋值了。

YAML 示例:

#configuration file 
config: 

  FIRST_NAME: "Bob"
  USER_ID: "abc13324"
  LAST_NAME: "Smith"
  Etc....

示例红宝石:

class NewClass
     def initialize
         configFile = YAML.load_file("pathToYourYamlFile.yaml")
         @firstName = configFile['config']['FIRST_NAME']
         @lasttName = configFile['config']['LAST_NAME']
         @user_id = configFile['config']['USER_ID']
         etc....
     end
 end 

这最适合在程序中设置常量。然后,您可以从任何文件访问它们。

【讨论】:

  • 你能举例说明你的答案吗?
【解决方案3】:

多年来,通过各种语言的反弹,我开始使用这种布局:

ATTRIBUTES = %w(
  archive_url assignees_url
  blobs_url branches_url

  collaborators_url comments_url commits_url compare_url 
  contents_url contributors_url

  description downloads_url
  events_url
  fork forks_url full_name
  git_commits_url git_refs_url git_tags_url
  hooks_url html_url
  id issue_comment_url issue_events_url issues_url
  keys_url
  languages_url
  merges_url milestones_url
  name
  owner
  private pulls_url

  stargazers_url statuses_url subscribers_url
  subscription_url

  tags_url teams_url trees_url
  url
)

%w(
  description
  fork full_name
  html_url
  login
  name
  owner
  private
  url
).each { |a| attr_accessor a.to_sym }

行按字母顺序排序,行中的每个单词都按字母顺序排序。

如果某一行太长,我会将其换行并在其前后添加空行以在视觉上分隔它们,保持行的类型和行中的单词。

大多数编辑器都使排序变得容易,这是清理混乱列表的第一步,这很痛苦,之后保持它的维护也没什么大不了的。我使用 vim,它有 sort 命令,但 Sublime Text 2,我将其视为我的“记事本”替代品。

我这样做是为了维护。我发现扫描已排序的行要容易得多,即使它与其他行在列中的间距不均匀,也比我试图找到显示在漂亮的'n整洁列中的排序顺序不同的东西要容易得多。整洁很重要,但秩序使我的头免受伤害。试图编辑列中的表格并让它全部搞砸,因为我添加了一个单词很快就会变旧,所以列被扔掉了,我只是排序。我敢肯定,当我告诉他们这样做时,一开始会惹恼我的同事,但他们很快就看到了好处,这让我闭嘴了。 :-)

随着Ruby v2.0添加%i,第二个例子可以改为:

%i(
  description
  fork full_name
  html_url
  login
  name
  owner
  private
  url
).each { |s| attr_accessor s }

变化不大,但干净了一点。

【讨论】:

    【解决方案4】:

    在我看来,所有这些都是表列名。

    如果是,则不需要 attr_accessor,rails 会自动提供对它们的访问权限。

    您可以拨打object.name, object.html_url等。

    你能确认是不是这样吗

    【讨论】:

      猜你喜欢
      • 2010-09-08
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-13
      • 2010-10-07
      • 1970-01-01
      相关资源
      最近更新 更多