在定义常量或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 :(得分: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中,为符号数组引入了新的文字表达式%i[...]
:
attr_accessor *%i[
name
login
full_name
owner
private
...
]
答案 1 :(得分:0)
您可以使用YAML
文件或设置配置文件。然后在初始化时,您可以指定值。
示例YAML:
#configuration file
config:
FIRST_NAME: "Bob"
USER_ID: "abc13324"
LAST_NAME: "Smith"
Etc....
示例Ruby:
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
这最适合在程序中设置常量。然后,您可以从任何文件访问它们。
答案 2 :(得分: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 v2.0添加%i
,第二个示例可以更改为:
%i(
description
fork full_name
html_url
login
name
owner
private
url
).each { |s| attr_accessor s }
这不是一个很大的改变,但它有点清洁。
答案 3 :(得分:-2)
在我看来,所有这些都是表列名。
如果是,那么你不需要attr_accessor,rails会自动提供对它们的访问权。
您可以拨打object.name, object.html_url
,依此类推。
你能确认是否是这种情况