[#47414] <=>の意味は? — "T.Soejima" <clev@...2.so-net.ne.jp>

そえじま@勉強中です。

37 messages 2010/09/17
[#47420] Re: <=>の意味は? — 藤川浩明 <fhir0aki3@...> 2010/09/17

 他の方がすでに解答されているみたいですが、一応僕なりの答えを書いてみます。僕もRuby初心者なのではっきりとは言えないんですが・・・。

[#47422] Re: <=>の意味は? — "T.Soejima" <clev@...2.so-net.ne.jp> 2010/09/17

そえじま@勉強中です。

[#47424] Re: <=>の意味は? — "Y. NOBUOKA" <nobuoka@...> 2010/09/17

信岡です。

[#47426] Re: <=>の意味は? — "T.Soejima" <clev@...2.so-net.ne.jp> 2010/09/17

そえじま@勉強中です。

[#47428] Re: <=>の意味は? — "Y. NOBUOKA" <nobuoka@...> 2010/09/17

そえじまさん

[#47429] Re: <=>の意味は? — "T.Soejima" <clev@...2.so-net.ne.jp> 2010/09/17

そえじま@勉強中です。

[#47433] Re: <=>の意味は? — 藤川浩明 <fhir0aki3@...> 2010/09/18

GyRCISE/JyE5SlZFeiQ3JD8kJCRIO1ckJCReJDckPyQsISI7fjRWJCxMNSQkJE4kRyFWGyhCT09Q

[#47435] Re: <=>の意味は? — "T.Soejima" <clev@...2.so-net.ne.jp> 2010/09/18

そえじま@勉強中です。

[#47438] Re: <=>の意味は? — masayoshi takahashi <maki@...> 2010/09/18

高橋征義です。『たのしいRuby』の著者の片割れの方から来ました。

[ruby-list:47498] Bignumの変換のタイミングについて

From: "Jun'ya Shimoda" <jun-shimo@...>
Date: 2010-09-30 13:42:05 UTC
List: ruby-list #47498
下田と申します。お世話になっております。

前回に引き続き、Twitterアプリを制作中なのですが
大きな整数の比較をするときに
妙な挙動が見られたので、相談させてください。

Rubytterでフォローしている相手の一覧を取得する際に
friendsという関数を使うのですが
1回当たりの最大取得件数が100件なので
100以上フォローしている人の一覧を取得するために
cursorという機能を使っています。

すると戻り値の構造体の中に
next_cursor=1345195858263188001
next_cursor_str="1345195858263188001"
という値が(例えば)入ってきます。

http://www.ruby-lang.org/ja/man/html/Fixnum.html
によると
「ほとんどのマシンでは 31 ビット幅です。
演算の結果が|Fixnum|  の範囲を越えた時には
自動的にBignum  <http://www.ruby-lang.org/ja/man/html/Bignum.html>  に拡張されます。」
という記載があります。
31bit幅とは
256^4 = 4294967296
よりは小さいのかなと思っています。
なので、構造体のnext_cursorの値はBignumなのだろうと
推測しています。

そして以下のプログラムを作成したところ

     last = rubytter.friends(screen_name, :cursor =>  last ? last.next_cursor : -1)
     while last.next_cursor>  0  #問題点
       sleep 60
       friends.concat(last.users)
       last = rubytter.friends(screen_name, :cursor =>  last ? last.next_cursor : -1)
     end
     friends.concat(last.users)

2行目の「問題点」の行でFixnumを越えていると思われる値が入っていると
条件に合致せず、while文に入らないようです。
問題点の行を

     while last.next_cursor_str.to_i>  0  #問題点

に書き換えるとうまく動きます。

Bignumを比較する際には何らかの演算をしてからでないと
いけないということなのでしょうか?

ご教示のほどよろしくお願いします。



-- 
  A   A         Name   : 下田 純也 (Jun'ya Shimoda)
(o'.'o) _/     e-mail : jun-shimo@nifty.com
(>  ~<)/       Web    : http://jironbach.iobb.net/
                Twitter: http://twitter.com/JironBach/


--------------010208090700080801020101--

In This Thread

Prev Next