Ruby 初心者スレッド Part 40
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/12/11(土) 15:46:15★注意★ Ruby 1.9.2 は初心者には若干時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
文字エンコーディング等の外部基礎知識が必要な上、不完全対応の第三者ライブラリでの問題の切り分けが手間です。
迷う点の少ない1.8.7に習熟→おもむろに1.9.2の変更点のみ重点学習、とすればスムーズに移行できるでしょう。
関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・エラーメッセージの共通そうな部分やエラーの出るモジュール名でググる
・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0269デフォルトの名無しさん
2010/12/21(火) 21:01:210270デフォルトの名無しさん
2010/12/21(火) 21:44:18Rubyに絡めてくれれば乗る人もいたんだろうけど…
0271デフォルトの名無しさん
2010/12/21(火) 21:51:19そうですかー
>>261が理解出来たら、じゃあなんでRubyじゃダメだったのか、単に速度が遅かったからか、大量のつぶやきをさばけなかったのか、もしくは動的型によるリファクタのしづらさとか、それとももっと違う原因なのか、という部分も知りたいと思ってました
ここじゃスレ違いだとすると、どこで聞くのが適切でしょうか?
0272デフォルトの名無しさん
2010/12/21(火) 21:52:14DBやファイルや他のデーモン・サービスと連携する部分がバック
だと思えばいいんじゃないかね。
0273デフォルトの名無しさん
2010/12/21(火) 22:13:27これは単純に(ある程度の)足し算というレベルで高い
ごっつい処理をたくさんの人に提供、とかいうのだと、最終的にPHPのほうが最低2倍は捌ける人数多いと思う
でも、それでもRubyを使う人がいる
この世のあらゆるプログラムをCで記述しないのと同じような理屈
Rubyで初期開発して、処理負荷が間に合わなくなったら他の言語に移る、というのは
Ruby的にはまったく悲しむべき問題ですらない
むしろRubyの優位性を示す出来事であるとすら思う人が多いはず
公開プロダクトを最初から最後までRubyで運用し倒しましたとかいうのは
その人がお金持ちか基地外か過疎プロダクトかどれか
0274デフォルトの名無しさん
2010/12/21(火) 23:04:46matzはtwitterがscalaを採用したことを、負けたと思ってるみたいだけどな
0275デフォルトの名無しさん
2010/12/21(火) 23:52:110276デフォルトの名無しさん
2010/12/22(水) 01:13:36特に作者としては自然なことだと思うが
0277デフォルトの名無しさん
2010/12/22(水) 08:07:10Net::HTTP.Proxy メソッドは、
Net::HTTP を継承したクラスを作成して、
作成した クラスを返します。
Ruby は非常に柔軟な言語であるため、
メソッド中に動的にクラスを作成して、
そのクラスを返すということが可能です。
このメソッドの中にクラスって意味がわかりません。
普通、クラスを作ってその中にメソッドを定義するのではないですか?
0278デフォルトの名無しさん
2010/12/22(水) 08:11:08Windowsで下記のプログラムを-Eを付けて実行するとEncoding::UndefinedConversionErrorが
発生します。どのように修正すべきか教えていただけませんか
# coding: utf-8
require 'pstore'
db = PStore.new("pstest")
str = "あいうえお"
db.transaction{ db[1] = str }
db.transaction{ puts db[1] }
C:\home\mechanize>ruby -v
ruby 1.9.1p429 (2010-07-02 revision 28523) [i386-mswin32]
C:\home\mechanize>ruby -Ecp932:utf-8 hoge.rb
C:/PROGRA~1/RUBY-1~1.1/lib/ruby/1.9.1/pstore.rb:499:in `write': "\xE3" from ASCII-8BIT to UTF-8
in conversion from ASCII-8BIT to Windows-31J (Encoding::UndefinedConversionError)
from C:/PROGRA~1/RUBY-1~1.1/lib/ruby/1.9.1/pstore.rb:499:in `save_data_with_fast_strategy'
from C:/PROGRA~1/RUBY-1~1.1/lib/ruby/1.9.1/pstore.rb:473:in `save_data'
from C:/PROGRA~1/RUBY-1~1.1/lib/ruby/1.9.1/pstore.rb:335:in `block in transaction'
from C:/PROGRA~1/RUBY-1~1.1/lib/ruby/1.9.1/pstore.rb:361:in `synchronize'
from C:/PROGRA~1/RUBY-1~1.1/lib/ruby/1.9.1/pstore.rb:321:in `transaction'
from hoge.rb:5:in `<main>'
0279デフォルトの名無しさん
2010/12/22(水) 08:55:56…これどうしよう
>>277
たいしたことしてない
Net::HTTP.Proxy メソッドの定義見るとわかるが、ClassクラスのオブジェクトをClass.newで作って、
それにmodule_evalでクラスインスタンス変数の定義書いて、そのClassオブジェクトを返すようにしてる
klass = Class.new
klass.module_eval{
attr_reader :name
def initialize
@name='A'
end
}
p klass.new.name #=> 'A'
ぶっちゃけこんなマニュアルの中でこんな宣伝する必要なんてないと思うけどね
1.9時代においては削除されるべき無用で紛らわしい雑談だと思うよ、個人的には
0280デフォルトの名無しさん
2010/12/22(水) 09:11:16マニュアルじゃなくて雑誌記事でわ?
0281デフォルトの名無しさん
2010/12/22(水) 09:13:01当たり前だが
# coding: utf-8
require 'pstore'
db = PStore.new("pstest")
str = "あいうえお"
@evacuated_encoding_for_pstore = Encoding.default_external
Encoding.default_external = Encoding::ASCII_8BIT
db.transaction{ db[1] = str }
db.transaction{ puts db[1] }
Encoding.default_external = @evacuated_encoding_for_pstore
puts してるのは UTF-8 エンコーディングの UTF-8 バイナリ列のままだから
コマンドプロンプトでは化けるので注意
0282デフォルトの名無しさん
2010/12/22(水) 09:28:50ありがとうございました。
リファレンスちゃんと理解できるよう出直します。
私のところでは、化けずに出力されてます。
0283デフォルトの名無しさん
2010/12/22(水) 09:33:59ユーザー側にあんまり非はないし、この対処をマニュアルから読み取るのは不可能なんじゃないかな
0284デフォルトの名無しさん
2010/12/22(水) 10:19:08言語のユーザーや仕事の開発者としては、Ruby向いてないところに差し迫ったら乗り換えて当然と思ってしまうけど
Matzは立場上(本気でそう思ってなくても)悔しがらないとあかんのでは?w
0285デフォルトの名無しさん
2010/12/22(水) 10:44:23>メソッド中に動的にクラスを作成して、
>そのクラスを返すということが可能です。
>
>このメソッドの中にクラスって意味がわかりません。
メソッドの中でクラスを作成し、それを返す。ただそれだけ。
これはもとのマニュアルが悪いな。「動的に」なんて初心者にわかるはずがない。
直すなら
「メソッドの中でクラスを作成して返します」
「メソッドを実行するたびにクラスを作成して返すことができます」
とか。
0286デフォルトの名無しさん
2010/12/22(水) 11:18:44それは単に表面的なスタイルの問題じゃないの?
インデント強制だからPython は嫌だとか言ってる人たちを思い出すな
0287デフォルトの名無しさん
2010/12/22(水) 11:20:24アンカーミスだよな?
0289デフォルトの名無しさん
2010/12/22(水) 12:22:120290デフォルトの名無しさん
2010/12/22(水) 12:27:250291デフォルトの名無しさん
2010/12/22(水) 15:23:46jrubyで文字コード変換するなということなんだろうか
0292デフォルトの名無しさん
2010/12/22(水) 16:21:18もうJava標準APIを呼んでしまえ。
String#getBytesとかエンコード指定付きコンストラクタとか
Reader/Writerとか。
0293デフォルトの名無しさん
2010/12/22(水) 19:09:44>matzはtwitterがscalaを採用したことを、負けたと思ってるみたいだけどな
うそだぁ
ソースは?
0294デフォルトの名無しさん
2010/12/23(木) 07:23:26そんなことはない
現在のJRubyの動作は基本的に完全だと外人さんも太鼓判を押している
0295デフォルトの名無しさん
2010/12/23(木) 07:46:49まあNKF.guess組み込んで「エンコーディング対応しました」とか言う日本人もいるからどっちもどっちだが
案の定ISO-8859-xで盛大に誤爆して現在もコードまだ直ってない
君のことだよMechanize
0296デフォルトの名無しさん
2010/12/23(木) 09:55:16nkfみたいな文脈で外人の太鼓判は信用できないwww
0297デフォルトの名無しさん
2010/12/23(木) 11:55:09たとえば、
rubyでhtmlタグを文字列から除去する方法(正規表現) - YomuKaku Memo
http://memo.yomukaku.net/entries/51
のstrip_tagsメソッド
irbではエラー
str= open("http://railstutorial.org/ruby-on-rails-tutorial-book")
p strip_tags str
0298デフォルトの名無しさん
2010/12/23(木) 12:18:43いろいろ依存しているライブラリがあるので、
require 'erb'
require 'active_support/dependencies/autoload'
require 'active_support/core_ext/class/attribute_accessors'
require 'active_support/core_ext/string/encoding'
require 'active_support/concern'
# 面倒&初期化の重さを厭わないなら require 'active_support/all'
require 'action_view/helpers/capture_helper'
require 'action_view/helpers/sanitize_helper'
必要ならさらに include ActionView::Helpers::SanitizeHelper
0299デフォルトの名無しさん
2010/12/23(木) 12:36:440300デフォルトの名無しさん
2010/12/23(木) 12:41:22適当にアプリ作る。
そこで
rails console
でrailsがバックにあるirbが使える
0301デフォルトの名無しさん
2010/12/23(木) 13:59:31includeされるわけじゃない(本来ビューレンダリング用のものだし)ので、
そこは必要。
ただし、helper というビューオブジェクトが存在するので、include
しなくても
helper.strip_tags('...')
とは出来る。
0302デフォルトの名無しさん
2010/12/23(木) 14:20:31日本語のまとまった情報とか無いですよね・・・
0303デフォルトの名無しさん
2010/12/23(木) 15:24:50分かるので、あとはそれを使う環境を整えるために試行錯誤するだけ。
0304デフォルトの名無しさん
2010/12/24(金) 01:21:41まあ、Railsも使っててRuby本体にも造詣のある人は少なくないだろうし
わかるんじゃないかなあと思う
RailsのことはRailsスレでやれバーカバーカというよりは、単に遭遇確率の問題
0305デフォルトの名無しさん
2010/12/24(金) 13:21:04足りないメソッドあるし使えないから面倒くさい
rails consoleのhelperから使った方がいいな
前はrails consoleから簡単に使えないメソッドもあったし(確かcontrolに依存していたり、内部で擬似的にリクエスト発生が必要だったり?)
そういうのは徐々に改善されていっているようだけど
0306デフォルトの名無しさん
2010/12/25(土) 00:35:43インストール。
$ gem install rcodetools
0307デフォルトの名無しさん
2010/12/25(土) 11:38:05[ruby-list:47063] Ruby逆引きハンドブック & xmpfilter (was: Re
http://permalink.gmane.org/gmane.comp.lang.ruby.japanese/6175
これか、よくブログでコードに
1 + 2 # => 2
と表示されるのってxmpfilterなのか
エディタのサポートあれば便利だな
0308デフォルトの名無しさん
2010/12/25(土) 11:49:390309デフォルトの名無しさん
2010/12/25(土) 14:46:17ふとバイナリモードにしてみたところ、これまで30秒程かかっていた読み込みが
1秒足らずで終わりました。後から強制エンコーディングするにもおつりが出る速さです。
なぜこんなにテキストモードのI/Oは遅いのでしょうか?
0310デフォルトの名無しさん
2010/12/25(土) 14:55:35知らないよ
0311デフォルトの名無しさん
2010/12/25(土) 15:06:57そりゃ1バイトずつ内容チェックしていって
CR LF の並びがあれば "\n" に変換するという「無駄」な処理があるからに決まってるじゃん
変換がないだけならただ読んで終了だもの
0312デフォルトの名無しさん
2010/12/25(土) 15:12:05テキストモードで「改行コードを置換する」だけの処理がメインの処理よりも時間がかかるなんてことがあるのだろうか!
0313デフォルトの名無しさん
2010/12/25(土) 16:29:23フールセーフ(アフォでも安全)というか、
自動判別させる処理とか裏で動いているから、
0314デフォルトの名無しさん
2010/12/25(土) 16:30:35File.open("sentence.txt").each{|line| ...
0315デフォルトの名無しさん
2010/12/25(土) 16:46:34openにその変数を指定するとかではなく?
0316デフォルトの名無しさん
2010/12/25(土) 16:55:22そういう一手間がいるんですね。
C:\>xxx.rb xxx.txt > xxx1.txt
みたいなわけにはいかないのでしょうか?他の言語かじったときのイメージでこんな
かんじでいけなるのかと勝手に思ってたのですが。
ぐぐってもでてこないのだから、ダメなんでしょうね。
0317デフォルトの名無しさん
2010/12/25(土) 16:59:09ちなみにCSVファイルの加工です。
0318デフォルトの名無しさん
2010/12/25(土) 17:04:40スクリプト起動時の引数に指定してそれを利用するパターン(推奨)
inputed = ARGV[0]
file = open(inputed, 'rb'){|f| f.readlines}
puts "#{inputed} has #{file.size} lines"
実行:
$ ruby hoge.rb sentence1.txt
$ ruby hoge.rb sentence2.txt
スクリプトを起動して対話的に指定するパターン(一見凄いが後々意外とめんどい)
puts 'ENTER FILEPATH: '
inputed = $stdin.gets.chomp
file = open(inputed){|f| f.readlines}
puts "#{inputed} has #{file.size} lines"
実行:
$ ruby hoge.rb
ENTER FILEPATH: ← ここでキーボードからファイルパス入力してenter
ちなみにこの file.size は実際の行数を必ずしも反映してない
あと、ユーザーの入力が信用できない場合openにそのまま渡してはいけない
0319デフォルトの名無しさん
2010/12/25(土) 17:05:37それは出力だろ
出力ファイルの名前のことなのか
君のレスは情報の多くが欠落している
欠落した情報でググっても何も出てくるはずもない
0320デフォルトの名無しさん
2010/12/25(土) 17:06:51普通に書けば、
while line = gets
puts(line)
end
組み込み変数で明示的に書けば、
while line = $stdin.gets
$stdout.puts(line)
end
ドヤ顔したければ、
while gets; puts $_; end
0321デフォルトの名無しさん
2010/12/25(土) 17:08:09初心者スレに初心者がレスすると不幸を生むから見てるだけのほうがいい。
0322デフォルトの名無しさん
2010/12/25(土) 17:12:30Rubyの標準入力はIOオブジェクトとしてグローバル変数$stdinからアクセス可能
Rubyの標準出力はIOオブジェクトとしてグローバル変数$stdoutからアクセス可能
puts や print のデフォルト出力先は $stdout
スクリプト起動時の引数はARGV
「起動時引数をファイルとみなして開いたIOオブジェクトとみなすが、空の場合は標準入力に切り替える」のはARGF
…ていうか、標準入力や標準出力、起動時の引数を知ってればこれにたどり着くだろうから、
もしかして「コンソール」という言葉を知ってて呼び名を知らないんか
0323デフォルトの名無しさん
2010/12/25(土) 17:13:37とりあえずopenで開く人が多くて、なんだかなぁって感じがする。
普通は標準入出力使ってフィルタを作るだろ…言わなくてもそうなるだろ…?
どうしてopenつかうんだよもぉぉぉぉぉ!
0324デフォルトの名無しさん
2010/12/25(土) 17:15:08open して read する
対象のファイルの名前
を"コンソール"から指定したいのだろ
0325デフォルトの名無しさん
2010/12/25(土) 17:16:27なんなんだよ!1行ずつ読み込んで1行ずつ処理しろよぉ!
そうしたほうが省メモリだろぅ!
「でもメモリいっぱいあるし」
まぁそうだけどさぁ…><;
メリークリスマス!
0326デフォルトの名無しさん
2010/12/25(土) 17:18:580327デフォルトの名無しさん
2010/12/25(土) 17:19:24File.open("sentence.txt").each{|line|
# ここで読み込んだ内容を別途ファイルに保存したいが、
# 書き方がわからないので空欄にして質問しました
}
という質問の可能性を排除するような視野の狭い人は初心者スレで回答すべきではない
そもそも読み込み対象のファイル名は既に記載されてるではないか
なんでそれをユーザー入力させると誤読するのかマジ理解不能
0328デフォルトの名無しさん
2010/12/25(土) 17:22:010329デフォルトの名無しさん
2010/12/25(土) 17:22:030330デフォルトの名無しさん
2010/12/25(土) 17:23:55いくつもの可能性があるからいちいち聞きなおさにゃならん
記載されてるファイル名をベタ書きしたくないと普通は解釈する
0331デフォルトの名無しさん
2010/12/25(土) 17:24:59それは元質問の「スクリプトファイルにテキスト名を指定」で既に行われてるから
引数によるファイル名の指定をやりたくないという質問なのこれは
0332デフォルトの名無しさん
2010/12/25(土) 17:27:29テキスト名をコンソールで指定したい、だからファイル名を対話的に入力したいんだろ要は
>>318の後半でいいじゃん
0333デフォルトの名無しさん
2010/12/25(土) 17:30:220334デフォルトの名無しさん
2010/12/25(土) 17:30:39引数から入力したいならそういう風に言うはずだから、端末から入力する方法を答えればいい
とりあえずは gets でいいんじゃね
0335デフォルトの名無しさん
2010/12/25(土) 17:42:19ruby hoge.rb in.txt > out.txt
を
「ruby を hoge.rb と in.txt を引数にして起動し、標準入力のリダイレクトで out.txt に書き出す」
と読めてるかどうかでかなり説明レベルが違うような…
これなら「起動時の引数をrubyから取得する方法」と「標準出力
って、標準出力にはそれこそ普通に出力されててそれ以降はRubyの仕事じゃないじゃないですかやだー!
…引数を複数取ってrubyで利用する方法がわかればいいような気がする
ruby hoge.rb in.txt out.txt
と書いて in.txt を読み込んで out.txt に書き出す、ができれば満足されそうな
つまりはシェルのリダイレクトやらパイプやらを使用したくないんじゃないかと
>>316を読む限り、コンソールという概念を勘違いしてるという読みは正しいと思う
0336デフォルトの名無しさん
2010/12/25(土) 17:46:05>>316の「ほかの言語」はawkとかだと推測
0337デフォルトの名無しさん
2010/12/25(土) 17:53:53「○○を××して△△するプログラムを書こうとしてここまでできたのですが、
●●の部分を◇◇にする方法がわかりませんてめえら勝手に盛り上がってないでとっとと教えろカスが」
とか言ってくれると僥倖
たぶんこのへんのたいていのパターンはRubyで書けるし別に喧嘩してるわけでもないのでさくっと情報くれ
0338デフォルトの名無しさん
2010/12/25(土) 18:26:49一物の部分をギンギンにする方法がわかりませんてめえら勝手に盛り上がってないでとっとと教えろカスが
0339デフォルトの名無しさん
2010/12/25(土) 19:43:09つ http://www.flickr.com/photos/john_lam/1910968816/
0340デフォルトの名無しさん
2010/12/25(土) 21:14:27× フールセーフ(約2,580件)
○ フールプルーフ(耐馬鹿性, fool proof, 約5,120,000件)
○ フェイルセーフ(間違っても安心, fail safe, 約1,590,000件)
0341デフォルトの名無しさん
2010/12/25(土) 21:15:530342デフォルトの名無しさん
2010/12/25(土) 22:31:01前の行に戻りたいときはどうするの?例えば、GenBankの出力で
LOCUS AB248268 638 bp DNA linear PLN 21-AUG-2007
DEFINITION Asarum heterotropoides var. heterotropoides gene for ITS1, 5.8S
rRNA, ITS2, partial and complete sequence, specimen_voucher: H.
Yamaji 6170 (TUS).
ACCESSION AB248268
//
...
となってるときに
{'LOCUS' => 'AB248268', 'DEFINITION' => 'Asarum heterotropoides var. heterotropoides gene for ITS1, 5.8S
rRNA, ITS2, partial and complete sequence, specimen_voucher: H. Yamaji 6170 (TUS).', 'ACCESSION' => ...}
という感じのHashをつくりたいときに、1行ずつの処理でうまくやれるアルゴリズムはあるのでしょうか?
DEFINITIONが終わったときにどうしてもACCESSIONの行を再読み込みするようなアルゴリズムになっちゃうんです。
ちなみに、DEFINITIONのあとに ACCESSIONがくることは保証されていません。別のフィールド(大文字のみ)か、
レコード区切り(//)が期待されます。
0343デフォルトの名無しさん
2010/12/25(土) 22:39:56入力元となるデータが限定されており、そのサイズが十分に予想できてかつメモリに乗せてもかまわないのなら全て読み込んで処理すればいい。
0344デフォルトの名無しさん
2010/12/25(土) 22:46:16データ区切りまでバッファしてから処理すればいい
0345314,316
2010/12/25(土) 22:52:55>>335さんのが最も聞きたいことに近いように思います。コンソールというのも、
勘違いというか、読んだHPでそういう使い方をしていたようにおもったもので。
コマンドラインというのが正確なのでしょうか。
>>335さんのを利用させてもらいますと、
ruby hoge.rb in.txt out.txt
このin.txtという指定をコマンドラインでしたいのですが、その際のhoge.rbには
どう記述すればいいのでしょうか?今、下のような感じになってるわけですが、
"sentence.txt"という指定をファイルからはずして、コマンドラインから
好きなファイルを指定して実行したいのです。File.open()の()の中は
どうすればいいんでしょうか?それとも上の方で指摘されているような
記述じゃないと無理なのでしょうか?
File.open("sentence.txt").each{|line|
ary = []
line.chomp.split(/\s*\/\s*/).each{|item|
ary.push(item) }
略
0346デフォルトの名無しさん
2010/12/25(土) 22:55:41hoge.rbに
p ARGV
と書いて
ruby hoge.rb in.txt out.txt
と実行してみろ。
そしたら後は
ARGV
でググレ。
0347345
2010/12/25(土) 23:19:31コマンドラインに引数ですか。コンソールとかコマンドプロンプトとかファイルとかで
延々とググッてました。
0348342
2010/12/26(日) 09:03:38ありがとうございます。元のデータはせいぜい数MBなので、全部読んでもいいと思いますが、
区切りまでバッファするというのは考えてなかったので、それでやってみます。
0349デフォルトの名無しさん
2010/12/26(日) 22:05:550350デフォルトの名無しさん
2010/12/27(月) 01:05:14来年の漏れの目標はなぜか sed, awk の習得です
0351デフォルトの名無しさん
2010/12/27(月) 08:25:060352デフォルトの名無しさん
2010/12/27(月) 08:39:40グロ中尉
0353デフォルトの名無しさん
2010/12/27(月) 09:03:22http://www.mapee.jp/ruby/yield.html
class Array
def each_twice
i = 0 # => 0
while i < self.length
x = self[i] * 2 # => 0, 8, 10, 14, 18, 64
yield x # => nil, nil, nil, nil, nil, nil
i += 1 # => 1, 2, 3, 4, 5, 6
end
end
end
d_ary = [0, 4, 5, 7, 9, 32] # => [0, 4, 5, 7, 9, 32]
d_ary.each_twice do |x|
puts x # => nil, nil, nil, nil, nil, nil
end
いやーrubyすごいね、arryって基本的な上位のクラスだと思うのだけれども。
何か特殊な指定もしなくても
class Array
だけで関数追加できちゃうんだね。
0354デフォルトの名無しさん
2010/12/27(月) 09:32:29なんつーか素人から見ると、大事なところをこわしそうで怖いよねw
0355デフォルトの名無しさん
2010/12/27(月) 11:20:330356デフォルトの名無しさん
2010/12/27(月) 12:02:520357デフォルトの名無しさん
2010/12/27(月) 12:54:320358デフォルトの名無しさん
2010/12/27(月) 12:56:580359デフォルトの名無しさん
2010/12/27(月) 13:20:030360デフォルトの名無しさん
2010/12/27(月) 14:56:32自演ばっかりうっとおしい
0361デフォルトの名無しさん
2010/12/27(月) 15:18:32someday.upto(Date::today) do |val|
p val
end
だと,
Sun, 29 Aug 2010
Mon, 30 Aug 2010
...
Sun, 26 Dec 2010
Mon, 27 Dec 2010
のように,1日づつ出力されるのですが,
Sun, 29 Aug 2010
Wed, 29 Sep 2010
Fri, 29 Oct 2010
Mon, 29 Nov 2010
のように月ごとの応答日を列挙するようなupto的メソッドってありますか?
whileとかifとか条件文を使わずには無理でしょうか?
0362デフォルトの名無しさん
2010/12/27(月) 15:36:06> require 'activesupport'
=> true
> time = Time.mktime 2010, 8, 29
=> 2010-08-29 00:00:00 +0900
> time = time.months_since 1
=> 2010-09-29 00:00:00 +0900
> time = time.months_since 1
=> 2010-10-29 00:00:00 +0900
> time = time.months_since 1
=> 2010-11-29 00:00:00 +0900
> time = time.months_since 1
=> 2010-12-29 00:00:00 +0900
これではどう?
0363デフォルトの名無しさん
2010/12/27(月) 15:36:49とか。
0364361
2010/12/27(月) 16:50:29ありがとうございました。
>>363では若干問題が...
somedayが2010.8.25の場合は,本日を基準にすると,12.25が既に到来しているので,
5こ列挙されて最後が2010.12.25になってほしいのです。
逆に>>362だと2010.12.29はまだ到来していないので,列挙してほしくない。
いずれにしても,示唆に富んだアドバイスをありがとうございました。
(条件文無しでは無理そうですね。)
0365デフォルトの名無しさん
2010/12/27(月) 18:25:00そのようなイテレータを定義するのもありかもよ
条件文はイテレータ定義内に書いておき
メインの処理ではイテレータを使うとか
0366デフォルトの名無しさん
2010/12/27(月) 18:34:10# 1.9
someday.upto(Date.today).select {|d| d.day == someday.day }
# 1.9 or 1.8
(someday..Date.today).select {|d| d.day == someday.day }
あたりでOKなんだろうけど。
0367デフォルトの名無しさん
2010/12/27(月) 22:45:56■ このスレッドは過去ログ倉庫に格納されています