From: Masaki Suketa Date: 2000-01-15T16:45:03+09:00 Subject: [ruby-list:20223] Re: class Polynomial 助田です. In message "[ruby-list:20175] class Polynomial" on 00/01/12, "K.Kodama" writes: > Ruby の練習に > 1変数多項式の class Polynomial を実装してみました. sample-poly.rb を試してみましたが,エラーになります. ruby 1.4.3 です.(どうすれば良いのかわかりません.m(_ _)m) ---test to_a and to_poly for Array--- [].to_poly: 0 [2,3,4].to_poly: 4x^2+3x+2 ./polynomial.rb:333:in `to_s': undefined method `<' for nil (NameError) from ./polynomial.rb:330:in `each' from ./polynomial.rb:330:in `to_s' from sample-poly.rb:21:in `testConversion' from sample-poly.rb:166 > 添削っていうか, 御意見いただけないでしょうか? Polynomial が Array を継承するよりも Array オブジェクト を Polynomial のインスタンス変数にする方が私は良いと思います. 理由: Array を継承するのはあくまで,実装の都合であって(ですよね?) Polynomial は必ずしも Array すべての振る舞いを継承する必要 はない. あと,Array に to_poly メソッドを追加するよりは, p1 = Polynomial.new([1,2,3,4]) # または p1 = Polynomial.new(1,2,3,4) みたいな書き方ができた方が直観的で個人的に好きです. p1 = Polynomial.new(3,2) とかは p1 = Polynomial.new([2,2,2]) と書けば良いでしょうし.(で良いんですよね?) こんな感じでしょうか.(initialize と degree と書いてみました.) class Polynomial def initialize(arg) case arg when Array @array = arg when Numeric @array = [arg] else raise TypeError end end def degree deg = @array.length - 1 if deg < 0 @array[0] = [0] return 0 end while deg > 0 && @array[deg] == 0 deg -= 1 end deg end end 勘違いがあったらすいません. 助田 雅紀