[解決済み】Rubyの受け渡しは参照渡しなのか値渡しなのか?
2022-04-05 04:34:26
質問
@user.update_languages(params[:language][:language1],
params[:language][:language2],
params[:language][:language3])
lang_errors = @user.errors
logger.debug "--------------------LANG_ERRORS----------101-------------"
+ lang_errors.full_messages.inspect
if params[:user]
@user.state = params[:user][:state]
success = success & @user.save
end
logger.debug "--------------------LANG_ERRORS-------------102----------"
+ lang_errors.full_messages.inspect
if lang_errors.full_messages.empty?
@user
オブジェクトはエラーを
lang_errors
変数が
update_lanugages
メソッドを使用します。
に対して保存を実行すると
@user
オブジェクトに保存されたエラーは失われます。
lang_errors
変数を使用します。
私がやろうとしていることは、どちらかというとハックに近いかもしれませんが(うまくいっていないようです)。私は、なぜ変数の値が洗い流されるのかを理解したいのです。参照渡しは理解しているので、どのようにして値が洗い流されることなくその変数に保持されるのかを知りたいのです。
解決方法は?
従来の用語では Ruby は厳密にパスバイバリューです . でも、ここで聞かれているのは、そういうことではないんです。
Rubyには純粋な非参照値という概念がありませんから、メソッドに渡すことはできません。変数というのは常にオブジェクトへの参照なのです。オブジェクトが変化しないようにするには、渡されたオブジェクトを複製するかクローンする必要があります。(標準的なクローンメソッドはどちらも浅いコピーなので、クローンのインスタンス変数は元のオブジェクトと同じものを指しています。そのため、クローンのインスタンス変数は、元のオブジェクトと同じオブジェクトを指しているのです)。
関連
-
[解決済み】Ruby: 特定のバージョンのruby gemをインストールする方法は?
-
[解決済み] 検索 vs 発見する by vs どこに
-
[解決済み] RubyとRailsの "Date.today "フォーマット
-
[解決済み] 変数を参照渡しする方法を教えてください。
-
[解決済み] Rubyのswitch文の書き方
-
[解決済み] Rubyで配列に値が存在するかどうかを確認する方法
-
[解決済み] Rubyからシェルコマンドを呼び出す方法
-
[解決済み] Rubyでnilとemptyとblankを理解する方法
-
[解決済み] Rubyのattr_accessorとは何ですか?
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ActionController::InvalidAuthenticityTokenについて
-
[解決済み】bcrypt LoadError: Cannot load such file
-
[解決済み】コレクションをDESCで並べる方法
-
[解決済み] Ruby on Railsのランナー
-
[解決済み] heroku push rejected, failed to compile Ruby/rails app
-
[解決済み] 検索 vs 発見する by vs どこに
-
[解決済み] Railsで `before_action` での `only:` はどのように機能するのですか?
-
[解決済み] "render :nothing => true" は空のプレーンテキストファイルを返すのですか?
-
[解決済み] Ruby on rails アプリで ES6 (ES2015) を使用するにはどうすればよいですか?
-
[解決済み] ActionController::RoutingError: 初期化されていない定数MicropostsController