2

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

クラスではひどいです。これが最善の方法ですか?読みやすさを改善するための他の方法があるかどうか知りたいです。

4

4 に答える 4

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
  ...
]
于 2013-02-26T18:49:38.420 に答える
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 

これは、プログラムで定数を設定するのに最適です。その後、任意のファイルからそれらにアクセスできます。

于 2013-02-26T18:25:51.340 に答える
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、2 番目の例は次のように変更できます。

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

大きな変化はありませんが、少しきれいになりました。

于 2013-02-26T20:56:05.380 に答える
-2

これらはすべてテーブルの列名のようです。

はいの場合、それらに attr_accessor は必要ありません。レールは自動的にそれらへのアクセスを提供します。

などを呼び出すことができますobject.name, object.html_url

これが事実かどうか確認できますか

于 2013-02-26T18:55:26.247 に答える