1

暇なときにRubyを学んでいますが、定数の言語構成について質問があります。Rubyには、変数が変更されないようにするためのC ++ constキーワードに相当するものがありますか?次にいくつかのサンプルコードを示します。

first_line   = f.gets().chomp()
column_count = first_line.split( %r{\s+} ).size()
print column_count, "\n"

column_countをconstとして宣言したいのは、以下のプログラムで使用していて、誤って変更したくないためです。Rubyはこれを行うための言語構造を提供しますか、それとも私はそれを吸い上げて、私の変数が常に可変であることを理解する必要がありますか?

コメントへの回答:

「変数の「偶発的な」上書きの最も可能性の高い原因は、おそらく、コードの長いブロックです。」私はあなたの主張の精神に同意しますが、手紙には同意しません。コードの長いブロックや不要な状態を回避することについてのあなたのポイントは良いものですが、定数については、実装内のコードの設計を説明するのにも役立ちます。コード内のconstの値の大部分は、変更する必要がある変数と変更しない変数に注釈を付けることで得られるため、来年コードに戻っても変更したくありません。これは、適切な変数名と明確なインデントのために短いコメントを使用するコードが、詳細なコメントで説明される厄介に書かれたコードよりも優れていることを示唆するのと同じ感情です。

もう1つのオプションは、Rubyの#freezeメソッドのようです。これも、見た目が気に入っています。みなさん、ありがとうございました。

4

3 に答える 3

4

一般に、Ruby変数は変数です。

ジェレミーの答えを超えて、完全に正確ではありますが、非常に「主流」または慣用的に健全なRubyスタイルにつながるわけではないので、採用することはお勧めしません。RubyはC++のようには機能せず、通常、C++が最適に使用されるものにはあまり適していません。オペレーティングシステム、ワードプロセッサ、そのようなもの。

変数の「偶発的な」上書きの最も可能性の高い原因は、おそらく、コードの長いブロックです。結局のところ、5行のメソッドで変数の値を変更すると、それはかなり明白になります。たとえば10行より長いコードのブロックを習慣的に書いている場合、それらのチャンクはおそらくあまりにも多くのことを行っているので、それらを分割するように努力することを強くお勧めします(凝集力を高めます)。予期しない副作用の可能性を最小限に抑えるために、変数を可能な限りローカライズします(結合を減らします)。

于 2009-04-20T08:18:21.813 に答える
4

慣例により、rubyの定数は通常、COLUMN_COUNTなどのすべて大文字で記述されます。しかし、指摘されたように、大文字で始まるすべての変数は定数です。

于 2009-04-20T14:40:24.953 に答える
3

大文字で始まる変数は、Rubyでは定数です。したがって、コードを次のように変更できます。

first_line   = f.gets().chomp()
Column_count = first_line.split( %r{\s+} ).size()
print Column_count, "\n"

これで、を変更しようとすると警告が表示されますColumn_count

于 2009-04-20T05:02:45.340 に答える