-1

私はより良いコードになりたいと思っています..コードをよりクリーンで読みやすくします。

私が c/c++ で目にしたことの 1 つは、ローカル変数での const の使用です。変数が設定されると、関数/メソッドで変更されないことをコードの読者に伝えることには、多くの価値があると思います。

私は疑問に思っています....ローカル変数がconstであることを示す方法はありますか?

#for example 
sql = "select * from table1 where status = #{iStatusId}"
connection.execute(sql)

このメソッドでは sql は変更されません。そうマークしてもいいですか?

わかりました..それは悪い例ですが、要点は合っていると思います...願っています:)

EDIT:SQLに少し動的なものを追加しました..iStatusIdビットは、メソッドに渡されるパラメーターです。

EDIT2:私はこれをグーグルで調べました...すべての記事はマジックナンバーの置き換えについて話しています。それは非常に簡単で、私がマクロと見なすものです。CONTANTS は簡単です...私は const を探しています..それらは非常に異なるものです。

4

4 に答える 4

1

次のようなものを使用して、説明しているロジックを簡単に作成できます。

class Thing

    def unchangeable_attribute
      @unchangeable_attribute
    end

    def unchangeable_attribute=(value)
      raise SomeError if @unchangeable_attribute
      @unchangeable_attribute = value
    end

end

ただし、このような優れた使用例を想像するのに苦労しているため、Dave Newton に同意する傾向があります...

于 2013-01-16T00:56:38.290 に答える
0

obj.freezeRuby オブジェクトに定義されたメソッドはどうですか? ドキュメントから:

obj へのそれ以上の変更を防ぎます。変更を試みると、RuntimeError が発生します。凍結されたオブジェクトを解凍する方法はありません。

于 2013-01-16T07:56:04.177 に答える
-1

定数は大文字で始まるだけなので、次のようにすると問題なく動作します。

MY_CONSTANT = 1234

ただし、定数の上書きは可能ですが、警告が発行されます。

于 2013-01-15T23:46:06.933 に答える
-2

Ruby の Const は厳密には論理的ではありません。「すべての」変数は実際にはオブジェクトへのマスクされたポインターにすぎないため、それらを const の c パラダイムにキャストしても意味がありません。

const void * value = 'bla'; と等しくなります。

値 [1] を変更することもできます。

ここで私が間違っていることを証明したいと思います。

于 2013-01-16T00:47:58.860 に答える