2011-11-15 9 views
0

それはワンライナー方法はseasonを反復処理して返すことがあるはずのように思える最後seasonshow.has_season?falseに評価されます。Rubyのループで数値イテレータを返す簡潔な方法はありますか?

def last_season(show) 
    season = 1 
    season += 1 while show.has_season?(season) 
    return season 
end 

編集:has_season?は、HTTP GETコールを必要とするので、私は実際にそれを使用して周りに反復きれいな方法を見ることはできません。

答えて

1

一つの解決策は、このようなものを使用することです:

def last_season(show) 
    (1..1.0/0.0).find {|season| not show.has_season?(season)| 
end 

をしかし、私はshowを表すクラスがそのlast_season方法を提供すべきであると感じ、スルーブルートフォースすることなく、それを計算する方法がある可能性が高いです可能な季節の数。

+0

既知でない場合は、1.0/0.0が正の無限大を返します。 Ruby 1.9.2から、Float :: INFINITYを代わりに使用することもできました –

+0

ありがとうございます。実装は 'Show'クラスにする必要がありますが、まだループが必要です。 –

5

あなたがやっていることは、答えに到達するためのラウンドアバウトの方法です。 has_season?メソッドは何をしていますか?あなたのショーオブジェが季節の配列を持つのは理にかなっていますか?それはすでに、独自の季節を知っている必要がありますhas_season?に対応するショーのためには

class Show 
    attr_accessor :seasons 

    def initialize 
    @seasons = [] 
    end 

    def last_season 
    seasons.last 
    end 
end 

show = Show.new 
show.seasons = [1,2,3,4,5,6] 
show.last_season # => 6 
+0

+1、あなたは私にそれを打つ。 –

+0

'has_season? 'にはHTTP GETとHTMLの解析が含まれているので、実際には反復処理の周りにはクリーンな方法はありません。多分もっと良い方法があるかもしれません...? –

+0

特定のショーにいくつの季節が存在するかを示す概要ページはありませんか?私が知っているほとんどのウェブサイトはそうです。シーズンごとにシーズン情報を要求するよりも、サーバー上では簡単にできます。 –

0

:次に、あなただけのような何かを行うことができます。

last_season?メソッドは、Showクラスの一部である必要があります。 Showは、列挙型またはmax_seasonのような値を持ち、最大値または最大シーズンを返します。

関連する問題