[解決済み] 動的な定数割り当て
2022-02-18 20:31:49
質問
class MyClass
def mymethod
MYCONSTANT = "blah"
end
end
がエラーになります。
SyntaxError: 動的定数代入エラー
なぜこれが動的定数とみなされるのでしょうか?文字列を代入しているだけなのですが。
どのように解決するのですか?
あなたの問題は、メソッドを実行するたびに、定数に新しい値を代入していることです。これは定数を非定数にするものであり、許されることではありません。 内容 の文字列は(今のところ)同じですが、実際の文字列は オブジェクト は、このメソッドが呼ばれるたびに異なります。例えば
def foo
p "bar".object_id
end
foo #=> 15779172
foo #=> 15779112
なぜメソッド内の定数の値を変更したいのか、その使用例を説明していただければ、よりよい実装のお手伝いができるかもしれません。
もしかしたら、クラスのインスタンス変数の方がいいのでは?
class MyClass
class << self
attr_accessor :my_constant
end
def my_method
self.class.my_constant = "blah"
end
end
p MyClass.my_constant #=> nil
MyClass.new.my_method
p MyClass.my_constant #=> "blah"
もし、あなたが
本当に
メソッドの中で定数の値を変更したい場合、定数が文字列あるいは配列であれば、 「ごまかす」ことができます。
#replace
メソッドを使用すると、オブジェクトを実際に変更することなく、新しい値を取得することができます。
class MyClass
BAR = "blah"
def cheat(new_bar)
BAR.replace new_bar
end
end
p MyClass::BAR #=> "blah"
MyClass.new.cheat "whee"
p MyClass::BAR #=> "whee"
関連
-
[解決済み】Rubyで数値の配列の合計を出すには?
-
[解決済み】未定義のメソッド(NoMethodError)ruby
-
[解決済み] Rubyでファイルをあるディレクトリから別のディレクトリにコピーする
-
[解決済み] Rubyでファイル名を変更するには?
-
[解決済み] git, Heroku: pre-receive フックの減少
-
[解決済み] レイルズ・ジェネレート」を逆手に取る方法
-
[解決済み] gemのインストール中に "permission denied "エラーが発生するのはなぜですか?
-
[解決済み] Capybaraを使ったドロップダウンでのオプションの選択方法
-
[解決済み] Ruby Net::HTTPの実行期限が切れた
-
[解決済み] Ruby 1.8.7 ハッシュを文字列に変換する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】そのようなファイルやディレクトリはありません @ rb_sysopen ruby
-
[解決済み] Aptana Studio 3.6をWindowsにインストールできない
-
[解決済み] Rubyの除算はなぜ10進数ではなく整数を返すのですか?
-
[解決済み] Rubyのフィボナッチ数列(再帰)
-
[解決済み] RMagickのインストール。MagickWand.hが見当たりません。
-
[解決済み] Rubyで配列を降順にソートする方法
-
[解決済み] Rubyでリモートホストの到達可能性をpingで確認する方法
-
[解決済み] ルビースリープやディレイは1秒以下?
-
[解決済み] Ruby で配列の順序を逆転させる
-
[解決済み] .rb(Ruby)ファイルを表示するにはどうすればよいですか?