• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Rubyの問題について質問です。)

Rubyの問題についての質問

notnotの回答

  • notnot
  • ベストアンサー率47% (4845/10255)
回答No.1

違います。 <=> は明示的には呼び出されてませんが、sort! から呼び出されます。 sortについて調べてみてください。

tanakayasufumi
質問者

お礼

まさかsort!とセットになってるとは気づきませんでした。ありがとうございます。

関連するQ&A

  • Ruby の 文法に困ってます。

    以下のようなソースの場合、to_sメソッドは何時呼ばれているのでしょうか。またどういう意味を成しているのでしょうか。 Ruby初心者のためご教授頂けないでしょうか。 よろしくお願いします。 class Vector   attr_accessor :x, :y   def initialize(x=0, y=0)     @x = x     @y = y   end   def length     Math::sqrt(@x ** 2 + @y ** 2)   end   def to_s      "(#{@x},#{@y})"   end   def <=> other     length <=> other.length   end end arr =[] arr << Vector.new(2,2) arr << Vector.new(3,2) arr << Vector.new arr.sort.each do |item|   puts item end 結果は以下になります。 (0,0) (2,2) (3,2)

    • ベストアンサー
    • Ruby
  • Rubyのプログラム

    今、サンプルとしてこれがあるんですけど、これは交点を出力するものなんですが、線を出力するにはどこを変えればよいですか?? Xみたいに線を描きたいです。 class Ten def initialize(x, y) @x = x # インスタンス(@がついているもの)変数に代 入 @y = y # インスタンス(@がついているもの)変数に代入 end attr_accessor :x, :y end class Sen def initialize(p1, p2) @p1 = p1 @p2 = p2 @a = (p2.y - p1.y)/(p2.x - p1.x) @b = -@a * p1.x p1.y end attr_accessor :p1 # 始点 attr_accessor :p2 # 終点 attr_accessor :a # 傾き attr_accessor :b # Y軸との交点 end def koten(l1, l2) x = (l1.b - l2.b)/(l2.a - l1.a) y = (l1.a * l2.b - l1.b * l2.a)/(l1.a - l2.a) puts x, y end p1 = Ten.new(0.0, 0.0) p2 = Ten.new(6.0, 4.0) p3 = Ten.new(0.0, 4.0) p4 = Ten.new(6.0, 0.0) l1 = Sen.new(p1, p2) l2 = Sen.new(p3, p4) koten(l1, l2)

  • Ruby について質問です

    Rubyについて質問です class Document include Enumerable attr_accessor :title, :author, :content def initialize(title, author, content) @title = title @author = author @content = content end def words @content.split end def each words.each { |word| yield(word) } end end doc = Document.new('Advice', 'Harry', 'Go ahead make my day') doc.each { |word| puts word } このようなコードがすでに出来上がったおり、 これをアルファベットの早い順に並び変えて(sort)出力させるには どのようにコードを追加すればよいですか? どうやら、sort メソッドと <=> 演算子を使って記述するようですが、 よくわかりません 回答お願いいたします。

  • クラスをシリアライズする(ruby)

     質問はクラスのオブジェクトを、シリアライズしてファイルに保存するプログラムを作成したいのと、シリアライズしたデータベースのオブジェクトを、ファイルから読み込んで復元するプログラムを作成したいと思っています。 そこで、下記のプログラムを使って作りたいのですが、どのように作成したらいいか教えて欲しいです。 是非とも、よろしくお願いします。 class AddressFile def initialize(file) @original = file @meibo = {} fo = open("address_list.txt", "r") lines = fo.readlines fo.close for aLine in lines data = aLine.split @meibo[data[0]] = data[1] end end attr_accessor :meibo def search(name) @meibo[name] end def add(name,address) @meibo[name] = address end def update(name, address) @meibo[name] = address end end 動作環境はruby 1.8.7 (2010-01-10 patchlevel 249) [i686-linux]になります。 よろしく、お願いします

    • ベストアンサー
    • Ruby
  • Ruby on Rails: メソッドの定義で「self.」をつけるケースについて

    メソッドの名前に「self.」をつけるケースというは、 どういうことがあてはまるのでしょうか. 具体的には、以下のようなname_displayメソッドを作ったのですが、 「self.」をつけないと、undifined methodエラーになってしまいます. 偶然、self.をつけたら動いたので、そういうものかとわかりました. ただ、理由がわかりません. ご存知の方、お教えください. Userモデル id,username class User < ActiveRecord::Base def self.name_display(userid) begin @username = User.find(userid) return @username.username rescue return '削除ユーザ' end end end

  • 演算子の再定義とインスタンス変数の参照と代入

    list9.1とlist 9.3をあわせた二次元の座標、xとyを持つ プログラムです class Point attr_reader :x, :y def initialize(x=0, y=0) @x, @y = x, y end def inspect # 表示用 "(#{x}, #{y})" end def +(other) # x、yのそれぞれを足す self.class.new(x + other.x, y + other.y) end def -(other) # x、yのそれぞれを引く self.class.new(x - other.x, y - other.y) end def [](index) case index when 0 x when 1 y else raise ArgumentError, "out of range `#{index}'" end end def []=(index, val) case index when 0 self.x = val when 1 self.y = val else raise ArgumentError, "out of range `#{index}'" end end end point = Point.new(3, 6) p point[0] #=> 3 p point[1] = 2 #=> 2 p point[1] #=> 2 p point[2] #=>エラー(ArgumentError) についてお尋ねしたいのですが、 def [](index)で演算子を再定義する際、値を参照する方法で def [](index)  case index  when 0   x   : と、していますが、xp.135のアクセサの説明など では@xと「@」が要りそうな感じがするのですが、この 場合は省いて大丈夫なんでしょうか? プログラムがローカル変数と間違って処理したりという ことは無いんでしょうか。 仮にないとすれば、ここのcase文にはインスタンス変数 と同じ名前のローカル変数などは定義できないのでしょうか? ご教授願います。

    • ベストアンサー
    • Ruby
  • Ruby初歩的な質問です。::はなんですか?

    ruby初心者です。 def ball_sakusei @ball = Array.new(BallMaru::BALL_KAZU){BallMaru.new(self)} end という行があったのですが、 BallMaru::BALLの部分の::はどういう意味ですか? 調べたけどよくわかりませんでした。 教えてくださいよろしくお願いします。

    • ベストアンサー
    • Ruby
  • 複数のレコードを一つにするには

    いつもお世話になっています。 複数のレコードを一つのレコードにに変換するにはどのようにすればよいでしょうか? ID|Name -------- 1|yamada 2|sato 3|suzuki ↓ ID|Name|ID|Name|ID|Name| ------------------------- 1|yamada|2|sato|3|suzuki|

  • Ruby on Rails 「attr_accessor」 の使い方に

    Ruby on Rails 「attr_accessor」 の使い方について こんにちは。 現在、Ruby on Railsで登録画面を作成しているのですが、attr_accessorで定義した項目に対して、validationのチェックを行うと、問題が起きてしまいました。 attr_accessorで定義した項目は、DB登録の対象ではないのですが、lengthのチェック等を行う必要があり、validates_length_of等を使って入力チェックを行っています。 問題になったのは、入力があったときだけチェックをかけたいのに、入力がなくてもチェックがかかってしまうという状態になってしまうことです。 「:if => 項目?」を書いてみると、「undefined method」のエラーがでてしまいます。 どなたか対応策の分かる方がおられましたらご教授いただけないでしょうか? 下記に実際の問題箇所のモデルクラスのソースを書いておきます。  class User < ActiveRecord::Base    attr_accessor :NEW_USER_PW ← 追加したアクセサ    # 追加したアクセサに対するチェック    validates_length_of :NEW_USER_PW, :minimum=>4, :message=>"は%d桁以上を設定してくださ                 い。", :on => :update, :if => :NEW_USER_PW?  end 上記のチェック内の「:if => :NEW_USER_PW?」で落ちてしまいます。 入力がないのにチェックに引っかかるとまずいので、入力がないときだけ上記チェックを行えれば良いのですが・・・。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • Ruby
  • 【ruby】 『クラスの生成に失敗』を表現したい

    『クラスの生成に失敗』を表現したいのです。 newの戻り値にnilやfalseを返せばよいと考え、 以下の様に書いてみました。(行頭は全角スペースです。) class Hoge  def initialize(arg)   return arg  end end h = Hoge.new(false) STDERR.puts 'err' unless(h) errはputsされませんでした。(グーグルで調べるとinitializeのreturnは、返ってこないそうでした。) そこで以下の様に書きました。(行頭は全角スペースです。) class Hoge  attr_reader :stat  def initialize(arg)   @stat = arg  end end h = Hoge.new(false) STDERR.puts 'err' unless(h.stat) なんか、ものすごく我流になってる気がします。。。 アドバイスをお願いいたします。

    • ベストアンサー
    • Ruby