2013-02-26 27 views
1

定義是非常大的常量或attr_accessor符號時,應該怎麼辦?例如,這樣的事情:提高大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 

在一個類是可怕的。這是最好的方法嗎?我想知道是否有其他方法來提高可讀性。

+0

如果您對如何清理它有興趣,應該在http://codereview.stackexchange.com上提問。如果它不工作,StackOverflow是正確的地方。 – 2013-02-26 20:44:05

回答

6

變更線在一定寬度:

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中,新的字面e上的表達%i[...]介紹了一種符號的排列:

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

我認爲他明白了! :) – Arindam 2013-02-26 18:55:43

+1

+1向我介紹'%i []'符號:) – 2013-02-26 21:18:09

+0

btw格式化如果您使用VIM和Tabular插件(http://vimcasts.org/episodes/aligning-text-with- tabular-vim /) – 2013-02-26 21:19:15

0

可以使用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 

這是最適合你的程序中設置的常量。然後您可以從任何文件訪問它們。

+0

你能舉例說明你的答案嗎? – 2013-02-26 18:48:39

+0

當然,給我一分鐘。 – BlackHatSamurai 2013-02-26 18:58:15

-2

在我看來,所有這些都是表的列名。

如果是的話,你不需要爲那些attr_accessor,自動軌道提供對它們的訪問。

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

,你能否證實,如果是這樣的話

+0

這不是鐵軌,但感謝您的幫助 – 2013-02-26 19:02:20

0

多年來,經過反彈不同的語言,我來使用這種佈局:

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,我把它當作我的「記事本」替換品。

我這樣做是爲了維護。我發現通過一條已排序的行進行掃描要容易得多,即使它與其他行的列不是均勻分佈的,也不如我試圖找到某些不是按照好的整齊列顯示的排序順序。整潔計數,但秩序讓我的頭不受傷害。試圖編輯一個列中的表格,讓它全部發作,因爲我添加了一個字很快就會變老,所以列被拋出,我只是排序。我確信,當我告訴他們這樣做時,它首先會讓我的同事惱火,但他們很快看到了好處,並且讓我閉嘴。 :-)

使用Ruby 2.0的加入%i,第二個例子可以改爲:

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

這不是一個大的變化,但它是一點點清潔。