[解決済み] Ruby、スタックレベルが深すぎる (SystemStackError)
2022-02-05 18:51:14
質問
次のようなコードがあります。
class BookPrice
attr_accessor :price
def initialize(price)
@price = price
end
def price_in_cents
Integer(price*100 + 0.5)
end
end
b = BookPrice.new(2.20)
puts b.price_in_cents
これはすべてうまくいき、220を生成します。しかし、2行目のattr_accessor :priceを置き換えると、以下のようになります。
def price
@price = price
end
スタックレベルが深すぎる(SystemStackError)エラーが発生します。どうなっているのでしょうか?Integer(price*100 + 0.5)をメソッド呼び出しのpriceの代わりに@priceに置き換えればいいのは分かっていますが、OOPの観点からこのままにしておきたいのです。attr_accessorなしでこのコードをそのまま動作させるにはどうしたらよいでしょうか?
解決方法は?
以下のコード
def price
@price = price # <~~ method name you just defined with `def` keyword.
end
決して止めることのできない再帰を作成します。
<ブロッククオートattr_accessorなしでこのコードをそのまま動作させるにはどうしたらいいですか?
として記述する必要があります。
def price=(price)
@price = price
end
def price
@price
end
関連
-
[解決済み】Ruby: 特定のバージョンのruby gemをインストールする方法は?
-
[解決済み] RMagickのインストール。MagickWand.hが見当たりません。
-
[解決済み] 配列に何かを追加しようとしたときに、nil から整数への暗黙の変換が行われない。
-
[解決済み] 動的な定数割り当て
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Rubyで新しい文字列を作成せずに文字列をトリミングする標準的な方法は何ですか?
-
[解決済み】そのようなファイルやディレクトリはありません @ rb_sysopen ruby
-
[解決済み] Ruby プログラムに一定時間待つように指示する
-
[解決済み] gemをインストールできない - makeが内部または外部のコマンド操作可能なプログラムまたはバッチファイルとして認識されない。
-
[解決済み] 配列に何かを追加しようとしたときに、nil から整数への暗黙の変換が行われない。
-
[解決済み] rubyでto_yamlに書式オプションを指定することはできますか?
-
[解決済み] Rubyのダブルコロン `::` とは何ですか?
-
[解決済み] Rubyでファイルを移動するにはどうしたらいいですか?
-
[解決済み] Rubyで2次元配列の作成と反復処理
-
[解決済み] 構文エラー、予期しない ',', 期待する ')' 。