1 :
【大吉】 :
2009/01/01(木) 13:13:22 プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
【Ruby1.9 は不安定な開発版であり初心者には全く向きません】
【最新安定版の Ruby1.8.7 の使用をお勧めします】
※1.8.7 は1.8 と 1.9 の橋渡しをするためのリリースです。
1.9 の新機能の一部が利用可能なので初学者にお勧めです。
※ただし十分安定しているとは言えないので
プロダクション環境での利用にはお勧めしません。
関連スレやURLは
>>2-8 あたりを見てください。Ruby on Railsの質問は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を読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
. \\ ィ ─ァ 立 |了
// ┴ ∠ 」 口 |
,ィ' ̄` ー、_
((”Y:ハMリソY ち
,ゞ-{|モュ tチ|ト. く, ,ノ⌒ヽ-、_
`tー'ゝ ワ,.イ:`イ ,.ィ'" 入 ヽ i_,,.
/::::::_:ィヤ'Y::/7`ー-ゥ=、-―=ー―--y'" ,./_ゝ i Y }_
/:::イ キ/|./::/f / /| { ヤi | |ヘ、_
/:/Y ヤ"|:::| キィ、 ヤフ`ー--=、..,,__i i / | `ー' イ/Yー'
/::/イ i. , i::| /::::`Y"::\ ∨. |. 変 .|
>>1 .|
Yモ`、_,,.=-―ー{(.>、Y i || /::::::::::::::::::::::\. ヽ } 身 .| 乙 |
`ー--zー―-イノ:::::::ノ }{ ):::::::::::::::::::::::::::\ } / 部 .| 部 |
/:::::::::::::::::::::::::/ リ Y:::::::::::::::::::::::::::∧ i{ノ| 部 .| 部 |
/:::::::::::::::::::::::::イイT"T"T ̄| ヤー―--==;;;_::::} | 長 | 長 |
 ̄ ̄" ̄`ー/7フ ̄ii ̄ii ̄iT∧ ヾ . | | |
>ruby -v ruby 1.8.6 (2007-06-07 patchlevel 36) [i386-mswin32] (1) 変数を取り消すことはできるのでしょうか? var = "somthing" (varを取り消す処理) p defined? var #=>nil (2) 手続きオブジェクトのブロックパラメーターにデフォルト値を設定する方法はあるのでしょうか? proc = lambda { |i=1| puts i } proc[2] #=>2 proc[] #=>1
DBマイグレーションでデータベースにカラムを作ろうとしましたが 以下のようなエラーが出て困っています. ** Invoke db:migrate (first_time) ** Invoke environment (first_time) ** Execute environment ** Execute db:migrate rake aborted! undefined method `each' for #<Mysql:0x351bf78> コードは次の最低限のものです class Test < ActiveRecord::Migration def self.up t.timestamp end def self.down end end どうすればいいかどうかよろしくお願いします
>>9 >(1) 変数を取り消すことはできるのでしょうか?
ないんじゃないかなあ。
>(2) 手続きオブジェクトのブロックパラメーターにデフォルト値を設定する方法はあるのでしょうか?
1.8 ではできない。1.9 ではできるらしい。
obj = proc {|x=10| p x }
obj.call(123) #=> 123
obj.call() #=> 10
>>10 > undefined method `each' for #<Mysql:0x351bf78>
というエラーだから、PostgreSQL使おうとしているのにMysqlが使われているのが問題の原因じゃないかな。
>>11 (1)は無理だけど、(2)は1.9でできるんすね
サンクス
13 :
10 :2009/01/01(木) 16:57:44
>11 どうもです PostgreSQLをいっさい使わず mysqlのみない設定のつもりなんですが, database.yml以外に使用するDBを指定する場所があるのでしょうか? 設定を変更したい場合どこをいじればいいのでしょう... すみませんがお願いします. 現在は以下の設定 development: adapter: mysql encoding: utf8 database: dbname username: user_id password: * host: localhost test: adapter: mysql encoding: utf8 database: dbname_test username: user_id password: * host: localhost production: adapter: mysql encoding: utf8 database: dbname_production username: user_id password: * host: localhost
>>13 すまん、「PostgreSQL使おうとしている」なんてどこにも書いてなかったな。勘違いしてた。
使ってるOS名と、Railsのバージョンを書いてみるといいかもね。
17 :
10 :2009/01/02(金) 04:14:35
MySqlのバージョンを5.0.67に落とすことで正常に動作しました. >ALL ありがとうございました しかし,最新版使うから正常に動かないって... いろんな環境で使われるソフトウェアって大変だなぁ...
x.0->x.1の大バージョンアップで何か仕様が変わったかしてかみ合わなくなったんじゃない? 例えば、5.0.72なら動きそうな気配。
ネットを移動していくプログラムを動かしていると、 相手からの反応がないと(もしくはaddressにたどり着けないと?) time outでrescueに引っかかることなく、rubyプログラムが終了してしまうんですが。 そのまま次を続けるのは、どうすればいいですか。
引数無しrescueはStandardErrorとその子クラスしか補足しないから TimeoutError( < Interrupt < Exception )が補足できない。 rescue TimeoutError rescue Interrupt rescue Exception のどれかを使う。
ロングIPアドレスを普通のIPアドレスに変換するライブラリってありますか?
ロングIPアドレスって何?
自己レス。32オクテットを10進整数とみなしたモノか。 [192*2**24 + 168*2**16 + 0*2**8 + 1].pack('N').unpack('CCCC') こんなもん?
32ビット4オクテットの間違いorz
>>23 irb(main):001:0> require 'ipaddr'
=> true
irb(main):002:0> IPAddr.new("192.168.1.1")
=> #<IPAddr: IPv4:192.168.1.1/255.255.255.255>
irb(main):003:0> ip1 = IPAddr.new("192.168.1.1")
=> #<IPAddr: IPv4:192.168.1.1/255.255.255.255>
irb(main):004:0> ip1.to_i
=> 3232235777
↑これです
この例なら、3232235777から192.168.1.1を得たいのです
自力で計算してもいいですが、既にあるならそれを使いたいなと
最後に .join('.') しないとな。
IPAddr.new(3232235777)
IPAddr.new_ntoh(3232235777)
new_ntohの引数はネットワークバイトオーダーのバイト配列とのこと $ truby -ripaddr -ve 'puts IPAddr.new_ntoh(3232235777)' ruby 1.9.1 (2009-01-02 patchlevel-5000 trunk 21272) [i386-darwin9.6.0] /usr/local/lib/truby/1.9.1/ipaddr.rb:104:in `ntop': undefined method `unpack' for 3232235777:Bignum (NoMethodError) from /usr/local/lib/truby/1.9.1/ipaddr.rb:96:in `new_ntoh' from -e:1:in `<main>' $ truby -ripaddr -ve 'puts IPAddr.new_ntoh([3232235777].pack("N"))' ruby 1.9.1 (2009-01-02 patchlevel-5000 trunk 21272) [i386-darwin9.6.0] 192.168.1.1 # trubyはウチのtrunk rubyの名前
[3232235777].pack("N") [192*2**24 + 168*2**16 + 0*2**8 + 1].pack('N').unpack('CCCC') >自力で計算してもいいですが、既にあるならそれを使いたいなと もう自力で出来てるね
Emacs使っていると、ruby のファイルを書いて保存すると # -*- coding: utf-8 -*- というのが勝手に先頭につくようになったのですが、やめさせることはできますか。
できますよ
1.9以降では実質的に必須になるから慣れておいた方がいいとは思うけど。
結婚式2週間前、IPA勤務の新郎がつこうた
http://tsushima.2ch.net/test/read.cgi/news/1230997845/ 仁義なきキンタマ ウイルス情報 Part80
http://changi.2ch.net/test/read.cgi/download/1229742858/546 546 :[名無し]さん(bin+cue).rar :sage :2009/01/04(日) 00:24:59
>>500 報告する時は、詳しく的確に、一部だけ報告しないでお願いね
[殺人] Administrator(20081230-101522)のキンタマ.zip 2,263,376,860 09ed98f10653c3fc2555621ceeed6bc33e8f6228
[殺人] Administrator(20081230-101522)のメール.zip 59,426,579 4da9459b30eec31f58b86530dbb48d1cf86ef4be
[写真集][IV] Administrator(20081230-101522)のアルバム.zip 2,205,946,474 9d87cc0e08dc0e3afd959fcead6c48d569787cee
膨大な量のファイル数キンタマ ファイル数 13508 フォルダ数2381
以前勤めてた会社の資料など多数 独立行政法人情報処理推進機構などの資料など無いと思うが
有るかも知れない、あまりにも数が有り過ぎる、メールなどは、古いものばかりメルマガなど膨大な量
個人情報などは、披露宴主席者などの住所、名前、電話、メール 数十人分しかしエロばっかり落としてるな
ちなみに ハメ撮りscr 踏んだみたいね
早稲田実業学校中等部卒業
早稲田実業学校高等部卒業
早稲田大学政治経済学部政治学科卒業
卒論「知的財産権とインターネット技術」
当時の同大学理工学大学院の大川功 賞佳作を受賞
コンピュータ関連会社に入社ソフトウェア開発の仕事を経て
2005年に独立行政法人情報処理推進機構に入社
ソフトウェア・エンジニアリング・センター企画グループに配属
同グループ主任 岡田さん33歳
2009年1月19日結婚式・・・
40 :
デフォルトの名無しさん :2009/01/04(日) 19:23:59
100マス計算をするプログラムを書いてください。 プログラムがランダムに出題し、人間が100個の マスに回答を入力し、確認ボタンを押すと 全問正解なら回答にかかった時間を表示して終了。 間違った場合は間違った場所にカーソルが止まり、 別の値が入力されるまで待ちます。 横10個、縦10個の数字は各々11〜99までの乱数、 演算は +,-,x のみでよいです。 よろしくおねがいします。
Pythonスレはすぐ回答でたのに Rubyのスレはだれも作れてないのがワロスwww
44 :
デフォルトの名無しさん :2009/01/05(月) 01:39:06
今年って平成何年だっけ?
煽っても何も出ませんよ
前スレで「データとパーサを分けるのは設計の常識みたいなもの」って 書いてあったけど、なんで分けたほうがいいの? そのへん解説したサイトあったら教えてもらえないだろうか?
前スレ見てないけど混乱するからじゃないの? スーパプログラマならごちゃ混ぜでも大丈夫だろうけど。 AWT弄ると割と楽しいな。 rubyにもjavaのAWTみたいなの欲しい。
>>46 パーザの差し替えが効かなくなるから。
だから個人用なら好きにしろって言われてたでしょ。
>>46 クラスと、クラスの生成を分離するのが
いわゆるFactoryパターン
こう問題を分割することで、コードの見通しが良くなり変更に強くなる
I used "-d" option to run ruby. However, following errors are occured. What is the menning? Exception `LoadError' at c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:871 - no such file to load -- rubygems/defaults/operating_system Exception `NoMethodError' at c:/ruby/lib/ruby/1.8/rational.rb:78 - undefined method `gcd' for Rational(1, 2):Rational debug_mode
>>50 ups, sorry...
note: last "debug_mode" string are output my code
> note: last "debug_mode" string are output my code note: last "debug_mode" string are output from my code
Rubyで、文字列として記述するさい、 \をエスケープしないで記述する方法はありますでしょうか? C#の @"c:\windows" みたいな機能です。
>>50 > Exception `LoadError' at c:/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:871
> - no such file to load -- rubygems/defaults/operating_system
It fails to execute "require 'rubygems/defaults/operating_system'"
> Exception `NoMethodError' at c:/ruby/lib/ruby/1.8/rational.rb:78
> - undefined method `gcd' for Rational(1, 2):Rational
You might execute a code like Rational(1, 2).gcd,
but the Rational class does not have a method named gcd.
>>55 レスありがとうございます。
シングルクォートだとそのままいけるんですね。助かりました。
>>54 > It fails to execute "require 'rubygems/defaults/operating_system'"
Humm....
Ignoring this exception is no problem?
> > Exception `NoMethodError' at c:/ruby/lib/ruby/1.8/rational.rb:78
> > - undefined method `gcd' for Rational(1, 2):Rational
> You might execute a code like Rational(1, 2).gcd,
> but the Rational class does not have a method named gcd.
I found "Rational::gcd" in rational.rb ...
But, the error has occurred. This is why?
sample code is here.
----cut here----
#!ruby -Ku
puts "hello"
----cut here----
Run command "ruby -d foobar.rb" to confirm.
require 'rubygems'って重い重い言われてるけどそんなに 重くないんだな linuxのruby1.9でnokogiriでリンクを抽出して表示するだけのコードなら require 'rubygems'するのと直接nokogiriをrequireするのとで差が無かったーよ active rubyとかだと違うのかなぁ
オブジェクトを外部ファイルに格納して呼び出して使うにはどうしたら良いんでしょうか。 ちなみにオブジェクトの中身は単なるファイルのパスです。 例えば、外部ファイル path.rb の中身を、 file = 'D:/hoge.txt' とします。それを別の Rubyファイル open.rb で、 open(file) と書いて開きたいのです。
>>56 一切のエスケープをしない文字列リテラルが欲しい!
シングルクォート文字列だと
クォート文字をエスケープすることでクォート文字自体を含ませられる
よって\自身やクォート文字直前の \ はエスケープしなければならない
したがって \\ と書きたい場合は \\\もしくは\\\\にしなければならず
\\PC1\share\doc\text1.txt みたいなUNCパスや
c:\doc\ みたいに、最後に\が付いたディレクトリ名とかで注意が必要
'\\\PC1\share\doc\text1.txt' # => \\PC1\share\doc\text1.txt
'c:\doc\\' # => c:\doc\
実際のことろは、ruby内で完結するならば パスの区切りは / にしとけば問題ないのだけれども
dirname = <<'EOS'.chomp
\\PC1\share\doc\
EOS
シングルクォートのヒアドキュメントだと、まったくエスケープされないが
どうしても末尾に改行がつくし、ワンライナー出来ない
まったくエスケープしない代わりにクォート文字が含められなくてもかまわない文字列リテラル希望
%b!もじれつ! みたいのだとクォート文字を変えられるのでクォート自体は記述できなくてもいいんだけど
62 :
デフォルトの名無しさん :2009/01/05(月) 12:15:45
なんという国際的なスレッド。。あっぱれ!
>>61 ワンライナーするだけなら%s記法でto_sするとか?
個人的には改行無視のバックスラッシュって使ったことないから
%qをバックスラッシュ記法無効にするぐらいでもかまわないけど
ハマる人はいるんだろうぁ。
C# の s = @"hogemage"; みたいなの?
65 :
デフォルトの名無しさん :2009/01/05(月) 15:09:25
cygwinにruby・rubygems・rails(1.2.6)・sqlite3-rubyを入れています。 データベースにアクセス(例えばrake db:migrate)すると、↓のようなWarningが表示されます。 /home/***/depot/config/boot.rb:20:Warning: Gem::SourceIndex#search support for String patterns is deprecated Warningが出る原因、対処法などあればご教授下さい。
2年前ぐらいのlinux環境で動いてたrubyのスクリプトを動かしたい 最新のrubyでは動かなかった 2年前だとバージョンいくつぐらいだといいのかな
>>60 何がしたいのか良く分からんが文面通りに解釈すると
---open.rb---
require 'path.rb'
open(file)
>61 hoge=%(\\PC1\share\doc\text1.txt) fuga=%(c:\doc\)
>>68 >ruby -ve "puts %(\\PC1\share\doc\text1.txt)"
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
\PC1 haredoc ext1.txt
1.9の話?
>>65 cygwinでrailsなんて無理だからやめとけ。
>>67 それだとうまくいかないんじゃない?
path.rb には file = 'D:/hoge.txt' と書かれてあるから、変数fileはローカル変数だよね?
require 'path.rb' しても、ローカル変数は path.rb の中だけで有効で、open.rb からは参照できないと思う。
解決策としては、fileじゃなくて$fileにするとか?
>>71 なんでこれでうまくいくの?
>>57 Humm... It's kinda odd.
It may be that the instalation of Ruby was failed??
トップレベルのローカル変数はファイル内に閉じてるよ
78 :
デフォルトの名無しさん :2009/01/05(月) 22:09:21
なんという国際的なスレッド。。あっぱれ!!
Railsで "fooBarBaz" を "foo_bar_baz" に変換するメソッドって何ですか。 あと後学のために知りたいんですけど、こういう場合って何をキーワードにしてぐぐればいいでしょうか。
>>63 書きたいのは、連続したバックスラッシュと 末尾のバックスラッシュだから
それでもだめなんですよ
>>64 そんな感じのが欲しい
C#の @"hogehoge" だと
唯一 "" が "になるっていうエスケープのみが効くようで
バックスラッシュは全部そのままになる
Windowsのパスや正規表現を書くには必要だったのでしょうね
C#環境をインストールしてないので、マニュアル見ただけだけですが
Pythonの raw文字列とか三連クォートのraw文字列はかなり理想的なのかも?
と思って調べたら
末尾にバックスラッシュが書けなかった
Win版Inkscapeに付いてた2.5.1なんですけど
r"""ほげほげ\""" はNGで文字列が閉じない
かといって
r"""ほげほげ\"""" # => ほげほげ\"
マニュアル見たら
raw 文字列を奇数個連なったバックスラッシュで終わらせることはできません
と書いてありました
C# だと @"foo\bar\dirname\" でもおkなのは良いよね Matzパクってくれないかしら
>>79 調べ方の一例
$ irb -ractive_support
irb> String.ancestors
=> [String, ActiveSupport::CoreExtensions::String::Multibyte,
ActiveSupport::CoreExtensions::String::Behavior, ActiveSupport::CoreExtensions::String::Filters,
ActiveSupport::CoreExtensions::String::Conversions,
ActiveSupport::CoreExtensions::String::Access, ActiveSupport::CoreExtensions::String::Inflections,
Enumerable, Comparable, Object, ActiveSupport::Dependencies::Loadable, Base64::Deprecated,
Base64, Kernel]
このうち、目的のメソッドはInflections(語形変化)の中にある。
irb> ActiveSupport::CoreExtensions::String::Inflections.instance_methods
=> ["titleize", "constantize", "singularize", "classify", "demodulize", "underscore", "titlecase",
"foreign_key", "tableize", "humanize", "pluralize", "camelize", "camelcase", "parameterize",
"dasherize"]
irb> "fooBarBaz".underscore
=> "foo_bar_baz"
あ。 gemで入れたactive_supportが、-rubygemsがなくても動いているのは ~/.irbrcでrequireしてるからデス… 適当に自分の環境にあわせてね。
irb(main):005:0> puts %(\\samba\test\hoge"mage") \samba esthoge"mage" だめっぽいっすね・・・
Rubyだと ファイルパスは / でかくだろJK、というのもわかるんですが ちょっとしたファイルパスのコピペでも/に置換が必要だったり、 win32のプログラムに渡すのにパスが / じゃ通らなケースが多々あったり 細かいところで不便なところがあるんですよね・・・。
>>57 Ok. I see.
I will re-install ruby programs.
Thanks all.
Best regards,
>r"""ほげほげ\""" はNGで文字列が閉じない >かといって >r"""ほげほげ\"""" # => ほげほげ\" r"""\"ほげほげ""" # => \"ほげほげ r"""ほげ\\ほげ""" # => ほげ\ほげ >C# だと @"foo\bar\dirname\" でもおkなのは良いよね >Matzパクってくれないかしら いちどVBのマニュアル見るといいよ
> いちどVBのマニュアル見るといいよ なぜVBが出てくるのかさっぱりだが とりあえずどの辺を読めばいいのかkwsk
何で最後に \ が来るような文字列が必要なの? 最後が \ の時はディレクトリ、みたいな判断でもしてるとか?
ライブラリ(Rubyで書かれたかどうかは問わない)が そういう文字列を欲しがることは結構ある。
てかなんでwindowsのパス区切りは\なんだ? \\にしたりしなかったり一体どれだけの混乱を強いていると思ってるんだ
+がエンコードできないですけど、どうやればいいでしょうか。 p URI.escape("+") 結果 "+" ってなっちゃうですけど。
96 :
デフォルトの名無しさん :2009/01/06(火) 01:50:29
97 :
96 :2009/01/06(火) 01:54:14
ごめんうそ。
98 :
デフォルトの名無しさん :2009/01/06(火) 01:54:26
>>95 URI.escapeはURIの中に出てきたらおかしいものだけをエスケープする。
+はURIの中に入っていても全く問題ないのでエスケープされない。
+をエンコードしたいなら、CGI.escapeを使えばおk。
100 :
デフォルトの名無しさん :2009/01/06(火) 02:19:22
_ /,.ァ、\ ( ノo o ) ) R )ヽ ◎/(. F (/.(・)(・)\ . C (/| x |\) 嫁 //\\ . (/ \)
>>99 御解答ありがとうございます。
うまくできました。
かなり初歩なんですけど、配列、ハッシュ、構造体をどのように使い分ければいいでしょうか? Rubyに限ったことではないですけども・・・・。
>>94 MS-DOSはCじゃなくてBasicで書かれていたから
バックスラッシュでエスケープの問題は無かった
>>102 用途によって使い分ける
想像付かなければとりあえずアルゴリズム辞典とかでも読んでください
>>87 pathnameのWindows正式対応版が出てくれれば一番良いんだけどなー
pathname2は他の外部ライブラリに依存してたりするし
>>102 基本的には「臨機応変に」としか言えない
俺の場合、ハッシュはどうしても必要な時以外には使わないようにしている
間違ったキーを使っても、エラーが出なくて困ることがあるし
>>94 パス区切りが\でコマンドオプションが/なのは、VMS由来。
>>107 まじで?
CP/M由来だと思ってたんだが
>>107 VMSはディレクトリを[]でくくり、区切りは '.'
相対パス [.foo.bar.baz]filename.ext
絶対パス [foo.bar.baz]filename.ext
CP/M にはディレクトリないだろ
CP/M++ DQN
DOS は CP/M を元にして作った(参考にした?) CP/M はコマンドオプション指定に"/"を使ったので DOS もそうなった んで、ディレクトリを実装する時に"/"を使えないので"﹨"を使った というのが、普通に聞く説だと思うが
しかし「MS-DOSはCじゃなくてBasicで書かれていたから」には吹いた。 ちなみに最初はフルアセンブラです。
イメージで言いたいことはわからんでもないがぬ
0終端じゃなくて$終端だったような
>>116 それはファンクションコール9番の特殊仕様。
たしかキルドールが「その仕様の理由をゲイツに訊いてみな、答えられないから」と
言ってるという話を読んだ記憶がある。ソース忘れた。
>>117 俺もその話聞いたことがある。
同じくソース忘れたけど。
スレ眺めてたら自分の質問が初歩的過ぎて申し訳ないんですが、質問です。 [23,6,58,345]みたいな配列をコピペしてgetsなどで入力させるとき、 "[23,6,58,345]"となってしまって、これ自体が1つのオブジェクトとして認知されてしまうのですが、 23,6,58,345のように4つのオブジェクトとして一度に認識させる方法はあるのですか?
eval でも他所様からの入力はevalしたら死ねるので注意
ありがとうございます 早速ためして見ます
>>120 おかげで完成しました。
ありがとうございます!
>>120 他所様の入力をevalの前に正規表現で
(\[[\d\,]+\])
とかしてからevalしても死ぬ?
>>123 入力がその正規表現に限定できるならそれでもいいんじゃない?
>>123 安全と確信できるパターンなら大丈夫いいのだが、
そのパターンだと [,,,,,,,] みたいなのを受け入れてしまわんか?
あと、$SAFEおよびtaint/untaintについても調べておくとよい。
>>123 数値だけなら自分でscanとかsplitととかした方が安心な気がする
inspect な記述を数値か文字列のどちらかの配列かハッシュに変換するライブラリとか作ったら それなりに人気が出ると思う
>>127 こういうことじゃなくて?
eval({5 => 8.5, :a => 'b'}.inspect)
今回の記法に限れば YAML.load('[1, 2, 3]') => [1, 2, 3] とかもありかな。
JSONやYAMLとしてパースしてもいいんじゃない?
"[-1,0,1,2,3]".scan(/-?\d+/).map(&:to_i) こんな感じでいいんじゃなかろうか
132 :
デフォルトの名無しさん :2009/01/07(水) 01:43:30
インスタンス変数の値を、GDBMを使ってDBへ書き込みがしたくて こんな風に記述した。 GDBM.open(dbfile, 0644, GDBM::NEWDB){|db| line = @number, "," ,@name, "," ,@age, "," ,@address, "," ,@tel, "," ,@grade, "," ,@department, "\n" db[@number] = line } db[@number] = lineの部分で in `[]=': can't convert Array into String (TypeError) とエラーが出力される。 授業ではインスタンス変数の値ではなく、 CSVファイルから読み込み→DBファイルへ登録としてて、 カンマ区切りのデータならそのままDBへ書き込めるのかと解釈 したんだがそこから間違ってるのか…orz 長文スマソ
133 :
デフォルトの名無しさん :2009/01/07(水) 01:44:45
134 :
デフォルトの名無しさん :2009/01/07(水) 01:48:28
いや、質問者はむしろageろ
>>132 >line = @number, "," ,@name, "," ,@age, "," ,@address, "," ,@tel, "," ,@grade, "," ,@department, "\n"
これは多重代入の怪しいルールでlineには配列が入るんだ
で,多分GDBMには文字列しか保存できないからこんなことになってる
だからインスタンス変数の値が全部文字列なら+でつなげるといいと思う
136 :
デフォルトの名無しさん :2009/01/07(水) 02:11:51
>>135 試したら先ほどのエラーは消えました!
でも + でつなげるってことはカンマ区切りなしの文字列しか
DBへ書き込みできないってことになりますか?
line=@number + "," + @name + "," + (以下略 こうだよこう
138 :
デフォルトの名無しさん :2009/01/07(水) 02:17:09
>>137 素で勘違いしてましたorz
そして出来ました!
助かりました…ありがとうございました!
勉強用なら、一旦配列にして結合用文字でjoinするのがスクリプトとしてもわかりやすいんじゃね、と思うぞ data = [@number, @name, @age, @address, @tel, @grade, @department] GDBM.open(dbfile, 0644, GDBM::NEWDB){|db| db[data[0]] = data.join(',') } この場合はDBから読むときには data = db[no].split(',') とかして取り出す 結合用文字はカンマを選んだが、インスタンス変数の中に存在しない文字なら @ でも # でも ^ でも何でもいい
140 :
デフォルトの名無しさん :2009/01/07(水) 13:54:35
'\0' がマジおすすめ
141 :
デフォルトの名無しさん :2009/01/07(水) 15:09:26
>>139 ,140
重ね重ねありがとう!
おかげで課題出来そう
142 :
デフォルトの名無しさん :2009/01/07(水) 18:37:38
>>132 の者です
DB関連の問題は解決したんですが、
s1 = Student.new(引数)
s2 = Student.new(引数)
とインスタンスを生成した場合、Studentクラスのクラスメソッド内で
引数の値を判断してインスタンスを返す(s1とs2どちらのインスタンスなのか判断して返す)
という処理は出来ますか?
>>142 そのコードの目的も含めてもうちょっと詳しく
そのクラス名は正直どうよと思わなくもない
生徒のもつ個人情報という意味ならふつーに StudentData とかでいいじゃんね
>>142 回答は
「クラスメソッドは @@hoge 形式のクラス変数が読めるので
インスタンスメソッドの中(今回はinitializeの中)で先頭に@を2つつけたクラス変数に値を入れておけばOK」
だけど、たぶんクラスメソッドの使い方間違ってる
でも、間違ってるということが自覚できるのはずっと先なのでまずはどんどん変な構造のスクリプト作れ
145 :
デフォルトの名無しさん :2009/01/07(水) 18:53:04
>>143 課題で学生クラスを生成する課題があって、
・パラメータ7つ保持(これを引数にして渡してる、7つすべて文字列)
・学生クラスのインスタンス1つは、学生1人を表す
・クラスメソッドfindによって、文字列が一致する引数を持つ
学生インスタンスを取得できること
与えられた条件はこんな感じです
147 :
デフォルトの名無しさん :2009/01/07(水) 18:59:20
>>146 課題では他にも色々条件が与えられていて、
他の部分はほぼ実装できてるんだけど
向こうでは
>>145 みたいな部分的なこと聞いてもおkなんですか?
むしろこの初心者スレが、前提条件とか無関係な部分的なことを聞くスレだと思う クラスメソッドというのは、クラスで定義されたメソッドとかそういう意味ではなくて、たとえば見かけで言うと Student.find で動作するタイプのメソッドということでいいのだよね? s1.find s2.find find で動くタイプのメソッドを指してるつもりの言葉ではないのだよね?
149 :
デフォルトの名無しさん :2009/01/07(水) 19:08:33
>>148 Student.findの方です
言葉足らずですみません…
インスタンスを引数にとるユーティリティなメソッドとしてクラスメソッドにまとめろという課題にも思えるけど、違うんだろうな
>>149 Student.find の引数には具体的にどんなものを指定するのが妥当で、
それによってメソッドの返り値としてどんなものが返ってくるべきだと思う?
class Student @@list = {} attr_reader :name def initialize(name) @name = name @@list[name] = self end def Student.find(name) @@list[name] end end Student.new("foo") puts Student.find("foo").name こんな感じか。
>>151 initialize の引数はたぶん7つだと思うよ
っていうか、それだと個々のインスタンス生成する意味がねえ
>それだと個々のインスタンス生成する意味がねえ でも課題の内容からすると、まさにその方法を想定してるんだよな、たぶん…
>>152 そこまで面倒見る気はないw
クラスが自分のインスタンスのサーチをするサンプルを示しただけ。
155 :
デフォルトの名無しさん :2009/01/07(水) 19:24:07
>>154 サンプルありがとうございます。
でも最終的に欲しい値は
>>142 でいう"s1"か"s2"なんですorz
>>155 ( ゚Д゚)<えっ
インスタンスを入れた変数の名前を文字列として知ってどうするの?
まさかevalするわけじゃないよね。
>>151 で
s1 = Student.new("foo")
としたあとに
p s1
p Student.find("foo")
このふたつが等しくなるんだけど、それでも変数名が必要?
(Class.newやStruct.newは代入した変数名に依存した処理をしてるけど
あれってスクリプトレベルでできたっけ?)
>>155 >>150 に答えて
これがしっかりしてないと外部の人間はメソッドが作れないよ
課題の一部だっていうんだから、きっとfindメソッドを他のどこかで使うんじゃないかい?
158 :
デフォルトの名無しさん :2009/01/07(水) 19:39:55
s1 = Student.new(引数7つ) s2 = Student.new(引数7つ) s3 = (ry Student.find("引数に対して検索文字列") # ↑ここで検索文字列を引数に持つのがs1〜s3のどれか判定 s●.他の処理 としたかったんです… 最初からこう聞いてれば良かったですねorz
>>158 じゃあもうひとつ
その find メソッドを作ろうと決めたのはもしかしてあなた自身?
「Studentクラスのインスタンスの集団から該当するモノを抽出する」というのが本来必要な処理だったりしない?
そのために必要だと「あなたが思ったもの」が、「Student クラスにあるべきだと考えた find メソッド」だったりしない?
160 :
デフォルトの名無しさん :2009/01/07(水) 19:45:01
>>157 見落としてましたorz
返ってくるべき…ということは
>>158 に示したのが答えでは
ダメですよね?;
>>158 selfっていうのはnewされたオブジェクト本体で
そのあとに代入される変数の中身そのものだから
s = Student.find("引数に対して検索文字列")
s.他の処理
これでいい。変数名は知る必要がない。
s1をひっぱりだす検索をすれば、sの中身はs1と合致する。
162 :
デフォルトの名無しさん :2009/01/07(水) 19:47:09
>>159 findメソッドを作るというのは課題の条件です
>>162 こういうのは、ふつーに作ると、こういう処理になる
s1 = Student.new(arg1)
s2 = Student.new(arg2)
s3 = Student.new(arg3)
...
students = [s1, s2, s3, ...]
hit = students.find{|s| s.name = 'なまえ'}
と書きかけて、ちょっと思う
もしかして、データの検索って
>>132 みたいなDBで行う?
質問者は名前に一貫したレス番入れてくれないか カオスすぎる
165 :
デフォルトの名無しさん :2009/01/07(水) 20:03:32
まさに初心者スレだな。 エスパー衆、おつ
167 :
初心者 :2009/01/07(水) 22:26:54
rubyで画像サイトを巡回して画像を保存したいです よろしくおねがいします
168 :
初心者 :2009/01/07(水) 22:27:33
失礼しました。 環境はシグウィンです
コマンドラインで動作するWebクローラをシェルスクリプト的にRubyで制御するのが近道です ゼロまたはイチから作ることもできるけれど、おそらくそのための知識は無いことでしょう
170 :
デフォルトの名無しさん :2009/01/07(水) 22:31:35
>>169 そういや、完全初心者だった4年くらい前の頃に作った画像フェッチャは中でwgetが動いてるな
いいかげん書き換えたいんだが、問題なく動作してるし別にいいか、みたいな
HTMLとHTTP(と、情緒的Webサーバ管理)に関する知識がないと作れないからねえ
172 :
初心者 :2009/01/07(水) 22:33:33
ユーザエージェントとかクッキーを使わなくてはいけなくて なおかつ画像URLがリンクになっていないので自前で 解析しなくてはいけないのですが、クローラ的なものは使えますか? wgetで挑戦したのですがサーバにはねられました。 ちなみにC++はプロです。
173 :
デフォルトの名無しさん :2009/01/07(水) 22:35:11
>ちなみにC++はプロです。 ならドキュメント嫁、で終了。
174 :
初心者 :2009/01/07(水) 22:37:22
>>173 Rubyは変なキツネの漫画を読んだだけなので
どういうモジュールがあるのかとか、どういう作りにすれば
いいのかとかわけわかめです
175 :
初心者 :2009/01/07(水) 22:39:50
Net::HTTPなるモジュールがぐぐれたので使ってみようと思います。
176 :
初心者 :2009/01/07(水) 22:43:01
Net::HTTP.version_1_2 # おまじない Net::HTTP.start('www.yahoo.co.jp', 80) {|http| response = http.get('/index.html') puts response.body } これでなんかアクセスできたっぽいのですが、 構文が意味不明です。 解説きぼんぬ
open-uri使えば。
Mechanizeというのがある。 Hpricotとopen-uriで満足したから使ったことないんだけれど。
179 :
デフォルトの名無しさん :2009/01/07(水) 22:46:37
ほんとうにC++のプロなの?
180 :
初心者 :2009/01/07(水) 22:49:30
なるほど、open-uriもつ変えそうですね ありがとうです
181 :
初心者 :2009/01/07(水) 22:52:52
ブロック付きメソッド呼び出しという構文があるんですね 新しい言語は刺激的です
182 :
デフォルトの名無しさん :2009/01/07(水) 22:54:46
そっからかよw
>>178 ちゃんとリンクになってるならMechanizeも楽だけどね。
Mechanizeのメソッドを上書きして、
取得してきたHTML書き換えてリンクにしてからパースさせるという手もできそう。
185 :
初心者 :2009/01/07(水) 23:07:24
open-uriではStringIOオブジェクトが渡されて・・・ StringIOの中味をダンプ松本したいのですが printメソッド読んでもなにも表示されないです
IOはとりあえずreadだ
187 :
初心者 :2009/01/07(水) 23:13:56
>>186 ありがとうございます。
print f.read
でいけました。
188 :
初心者 :2009/01/07(水) 23:16:57
処々でみかける p って組み込み関数なんですね。 これはちょっと受け入れがたい衝撃でした。 タイプ量減らすためでしょうかね
189 :
初心者 :2009/01/07(水) 23:25:10
ハ・・・ッシュ??
p はデバッグ用の出力関数。 タイプ量を減らすためなのは確実。
191 :
デフォルトの名無しさん :2009/01/07(水) 23:31:51
まとめサイトのurl渡すと画像DLしてzipに固めるってのを以前作ったなぁ
根拠がないくせに「確実」だってさwwwwww 開発者がpって打ったとき冷蔵庫にザッハトルテがあることを思い出して食べてたら うっかり忘れちゃってたのが今でもそのままになってるに決まってるんだぜ
だから外部プログラムのwget使え wgetを使ったこともないような人間はそもそもまともなものを作れない Webブラウザを使ったことのない人間がWebブラウザを作れるか?
最初のwebブラウザを作った人はどうしたんだ
196 :
初心者 :2009/01/07(水) 23:38:12
std::map の特殊版みたいなもんですね > ハッシュ metaにレスポンスヘッダが格納されているはず・・・ でもSet-Cookieが見つからない・・・
>>195 通信に必要な仕様を読んだ
他人に聞かないと作れないってことは、仕様の知識がないということ
仕様の知識がないのなら、他人が作ったお着せのプログラムを使い倒すことから始めるべき
それで不満が出てきてから勉強を始めても遅くはない
198 :
初心者 :2009/01/07(水) 23:42:12
f.meta.each_key { |key| p key } でみたら"set-cookie"で入ってました。。。 ブロックつきなんたら構文、便利ですね
199 :
デフォルトの名無しさん :2009/01/07(水) 23:42:36
>>193 根拠がないくせに
「決まってるんだぜ」
____
/_ノ ヽ、_\
ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ <だっておwww
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒)
| / / / |r┬-| | (⌒)/ / / //
| :::::::::::(⌒) | | | / ゝ :::::::::::/
| ノ | | | \ / ) /
ヽ / `ー'´ ヽ / /
| | l||l 从人 l||l l||l 从人 l||l
ヽ -一''''''"~~``'ー--、 -一'''''''ー-、
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
200 :
デフォルトの名無しさん :2009/01/07(水) 23:48:16
>最初のwebブラウザを作った人 だれだっけ 事務クラーク?
201 :
初心者 :2009/01/07(水) 23:48:55
グローバルスコープで変数宣言したいのですが、 cookie だけだとundefined local variableとか怒られて cookie = '' だと通ったのですが、Why?
アラン・ケイ
204 :
デフォルトの名無しさん :2009/01/07(水) 23:54:16
undefined local variableすら読めないのにC++ではプロって あまりに恥ずかしい 仕事して金もらってれば一応プロではあるが、実力はアマチュア未満じゃないか
206 :
204 :2009/01/07(水) 23:56:13
いや、彼はHTTP、URL、HTMLの設計だけかもしれない。。。
207 :
204 :2009/01/07(水) 23:58:16
208 :
初心者 :2009/01/08(木) 00:11:06
>>205 Rubyでは未初期化での変数定義は許されないんですか?
C/C++では許されるので、そのあたりに疑問を抱いただけですが・・・
ちなみに私の書いたプログラムのユーザは全世界で数千万単位です。
209 :
初心者 :2009/01/08(木) 00:19:47
Cookie偽装でむふふ画像のありかをしめすhtmlの取得まで たどりつけました。 みなさまのご指導のおかげです。 画像取得&Zip化は明日にします。 どうもありがとうございました。
>>197 >他人に聞かないと作れないってことは、仕様の知識がないということ
>仕様の知識がないのなら、他人が作ったお着せのプログラムを使い倒すことから始めるべき
>それで不満が出てきてから勉強を始めても遅くはない
仕様の知識がないのはRubyについてで、
wgetとかHTTPの仕様には詳しそうじゃん。
wgetがRubyで実装されてるっていうなら別だが。
てかお前の読解力がなさすぎ
他の言語経験があるなら、仕様については人に聞かなくても ドキュメント読めばいいだけの話じゃん。 仕様を理解するのが面倒だから人に聞いたのかも知れないけど。
wgetよりcurlを使ってください
そうそう連番jpgを落すならcurlに限る
Hpricotでsearchした要素から再度searchするにはどうすればいいでしょうか?
class Blog
def chk_aaa(site)
content = Array.new
site.search("div.AAA").each { |entry|
content << entry.to_s.toutf8
}
return content
end
end
site = Hpricot(open("
http://hogehoge.net ").read)
aaa =Blog.new.chk_aaa(site)
上ので言えばdiv.AAAの中にdiv.BBBという要素があるときに
aaaからsearchするにはどうすればいいでしょうか?
質問の意図がわからなくなってきた。こっちかも? site.search("div.AAA").search("div.BBB").each
>>215-216 すいません。
やりたいのはaaa.search("div.BBB")なのです。
しかし、aaa.searchするにはaaaはArrayなので
それをまたHpricotに投げないといけないのかなとおもいまして・・・。
そんなとこでメソッド分けるなよめんどいからさ
p でいろいろ表示してみるとわかるが、Hpricot の構造は
・ parse でパースした最初のHTML … Hpricot::Doc
・ 条件などで抽出されたタグ単体 … Hpricot::Elem
・ 条件で抽出された複数のタグ … Hpricot::Elememts
になってる。で、search や at は Hpricot::Elem にも Hpricot::Elememts にも定義されてるから、
search や at をし続ける限りにおいて、メソッドチェーンは途切れない。
ということで、「chk_aaa の返り値を Hpricot::Elememts のままにしておく」が正解。
Hpricot のオブジェクトを文字列にするのは検索や抽出操作が完全に終わった最後の最後に行う。
それまでは「○○タグを表すオブジェクト(が複数詰まった配列互換の何か)」として扱うのが楽。
class Blog
def chk_aaa(doc)
return doc.search("div.AAA")
end
def pick_BBB(doc)
return doc.search('div.BBB')
end
end
doc = Hpricot(open("
http://example.com ").read)
aaa =Blog.new.chk_aaa(site)
puts "aaaの最初は #{aaa[0].inner_html} だよー" # ← たとえば画面表示時に文字列にする
bbb = aaa.pick_BBB(aaa)
で、aaaが途中でどーしても必要でないのなら、
class Blog
def pick_BBB(doc)
return doc.search('div.AAA').search('div.BBB')
end
end
doc = Hpricot(open("
http://example.com "))
bbb = Blog.new.pick_BBB(doc)
とかしてくっつけてしまう、または、もしCSSセレクタの記法を勉強できるなら
class Blog
def pick_BBB(doc)
return doc.search('div.AAA div.BBB')
end
end
doc = Hpricot(open("
http://example.com "))
bbb = Blog.new.pick_BBB(doc)
としてしまうのがコンパクトだとは思う。aaa が途中で必要なのなら仕方ないけれど。
222 :
デフォルトの名無しさん :2009/01/08(木) 14:03:24
#!/usr/bin/ruby -Ku require 'jcode' s = '平成21年1月1日~平成21年12月31日' p s.split('〜') s = '平成21年1月1日~平成21年12月31日' p s.split('~') なんですが、全角の〜では分割できない? ruby 1.8.6 (2008-03-03 patchlevel 114)です。
ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0] ["平成21年1月1日", "平成21年12月31日"] ["平成21年1月1日", "平成21年12月31日"] できたよ。 Unicodeの全角チルダ(FULLWIDTH TILDE)と波ダッシュ(WAVE DASH)の区別が どーのこーのという問題だろうか。
・ スクリプトが UTF-8 ではない ・ 2バイト文字…ああ、Unicode だから2とは限らないのか…の正規表現には u をつける p s.split(/〜/u) というのはどうだろ
225 :
222 :2009/01/08(木) 14:45:13
>>218-219 ありがとうございました.
やりたいことはブログタイトルや個々のエントリを構造体に入れて,構造体.エントリ.searchのようにしたかったので
aaaが発生するようになりました.
まず,returnのさいにHpricot::Elementsで返すようにして修正していこうと思います.
226がhpricotのこと言ってるからついでに href内にcat_xxxxx.htmlがあるaの要素をsearchするにはa[*=cat_]だけでOK? これでやるといらないところまでついてくるんだよな
Rubyの調べ方について質問です
例えば
http://blog.codezine.jp/editor/2007/10/rubyhpricot.php を読んでいると
(doc/:h1).each do |h1|
のような表記が出ます
これについて自力で調べたいのですが、Googleは記号類を無視するようで
これが何かわからないと調べることができません
そのようなときに、皆様はどう調べていますか?
この例だと、/:h1って何だとかです
h1はHTMLのタグなのは判りますが、なぜ文字列として""で囲まないのか
また each do |h1|の|h1|は何だとか
これは例ですが、Rubyを最近使い始めてこういうところで困っています
何かいい方法があればご教授下さい
Google先生の性癖はよくわからんが、俺だったら Ruby "/:" みたいにクォーテーションで括るかな。
: はシンボルを表すやつで、 / は除算演算子をオーバーロードしたものじゃないのか? /: で一塊じゃないはずだ。 まあ、普通はリファレンスマニュアルの索引で調べるよ。
Rubyを始めたばかりでhpricot使っちゃったのが不幸の始まりとしか
ここでの/はHpricotのメソッドだね。 searchの別名だ。 最近始めたばかりというならもう少し基礎やる時間を作ればいいと思う。
(doc/:h1).each do |h1| の場合、 doc →Hpricot::Doc のインスタンス / →docのインスタンスメソッド(/演算子の多重定義) :h1 →/ の第2引数であるシンボル |h1| →eachに与えられたブロックの単なる引数の名前 と、まず構文の要素を正しく認識しなきゃいかんね。
>>228 はCSSセレクタやXPathをRubyマニュアルで調べるに一票
ソース追うのに慣れてなければ irb 上で実行して, それぞれの変数にどんなオブジェクトが入ってるのか調べるのも大事 p object.class p object みたいな感じで まあわかる人ならソース追うのが一番だけど
>>228 ぐぐる以前に、そのページのコードの前にある参考ページに全部
書いてあるじゃん。
一般論としてということであれば、やっぱりぐぐる以前にリファレンスなり
入門なりを読むべきでしょう。
XP SP3、Ruby 1.8.6、エクセル2003使用者で、WIN32OLEを使ったプログラムを書いてるんですが、 エクセル操作の命令をメソッドの定義内で書いたときにエクセルのメソッド名?に空白が 含まれているものだとエラーが出てうまく動きません。 例: def hoge excel.Sheets(2).Select end は正しく動くのですが、 def fuga excel.Sheets(2).Move After = excel.Sheets(1) end は"Move After"の"Move"と"After"の間に空白が入っているために ”dynamic constant assignment”というエラーが出てしまいます。 スペースをなくしたりするとこのエラーは消えますが、当然他のエラーが出ます。。 おそらく空白があるために後ろの"After"を定数と認識しているのではないかと思うんですが、どうなのでしょうか? 色々なエクセルのメソッドを自作のメソッドに定義して呼び出して一度に実行、みたいなことをさせたいと思っているんですが 文法上メソッドの定義内でこういったエクセルのメソッドを定義するのは無理なのでしょうか? 何かうまい解決策がありましたらご教授お願いします。
>>238 > おそらく空白があるために後ろの"After"を定数と認識しているのではないかと思うんですが、どうなのでしょうか?
その通り
スペース含んでたりしてRubyがメソッド名としてうまくパースしてくれないときは Object#send を使うといい
excel.Sheets(2).send('Move After') = excel.Sheets(1)
ただWIN32OLEでExcel使ったことないから動作確認はしてない
おなじくExcelは詳しくなくて申し訳ないが MoveがメソッドでAfterは引数だって情報が引っ掛かったのよ ()でくくってみるってのはどう?
>>229 でも
>>228 の該当部分の構文要素を分解すると、
「doc」「/」「:h1」なんだよな……。
243 :
238 :2009/01/09(金) 01:07:01
>>239 助言ありがとうございます。
教えていただいた方法を試してみたのですがダメでした・・・
syntax error, unexpected '=', expecting kEND
excel.Sheets(2).send('Move After') = excel.Sheets(1)
>>240 助言ありがとうございます。
Move(After)ってことですよね。こちらも同様にダメでした。。
syntax error, unexpected '=', expecting kEND
excel.Sheets(2).Move(After) = excel.Sheets(1)
>>241 助言ありがとうございます。
これも同様にダメでした・・・orz
syntax error, unexpected '=', expecting kEND
そもそもメソッドの返り値に代入なんかできないからね
245 :
238 :2009/01/09(金) 01:13:01
すみません、
>>243 に書き忘れていましたが、
>>241 excel.invoke('Sheets(2).Move After') =excel.Sheets(1)
excel.Sheets(2).invoke('Move After') =excel.Sheets(1)
excel.Sheets(2).Move.invoke('After') = excel.Sheets(1)
と試してみましたがすべて下記のエラーでした。
syntax error, unexpected '=', expecting kEND
246 :
227 :2009/01/09(金) 01:17:37
わかりにくかったかもしれないから再度。
たとえば
http://blog.livedoor.jp/techblog/ ここのカテゴリの部分の要素を抜き取りたいのです。
div.entry-categoryで抜き出せばいいのですけど、複数あった場合はだめで、
複数あった時の共通するのはURLにcat_xxxxx.htmlとなります。
ので、hrefにcat_があればその要素を抜き出したいのですが・・・
247 :
227 :2009/01/09(金) 01:20:36
249 :
初心者 :2009/01/09(金) 01:28:42
250 :
227 :2009/01/09(金) 01:31:10
>>249 inner_textだとカテゴリ,カテゴリ2と抜き出せるのですがね。
URLにcat_を含むaタグのinner_textを抜き出したいのです。
251 :
238 :2009/01/09(金) 01:32:54
>>248 出来ました!
ありがとうございます!!
なるほど、そんな書き方があったんですね。
これで他のキーワード引数付きのメソッドも問題なく使えそうです。
本当にありがとうございましたm(_ _)m
a要素を全部取ってきてselectすれば?
253 :
228 :2009/01/09(金) 01:44:46
みなさま、ありがとうございます
>>229 クオーテーションでくくっても、その場合Rubyのみの検索と同じです
Javaのように、やたら長いAPIだとぐぐると一発で出てくるのですが
>>230 >>232 オーバーロードだったのですね
リファレンスは見てみましたが、該当するものを見つけられませんでした
お手数をおかけしました
>>231 そうかも知れませんが、mechanizeを使うことが結構大きなモチベーションでした
>>233 丁寧にありがとうございます
|h1|はここに限らずよく使う構文ですので何となく判るのですが
一例として、これも調べるのに苦労したことがあります
使うだけなら、黙って書き写せばいいのだけど、欲張ると急に難しくなる
>>234 ありがとうございます、CSSセレクタとかは詳しくはないものの別件で調べてみました
>>235 mechanizeは結構複雑で苦労していますが、よくやっています
>>237 ごもっともですが、こういうとき普通はどう調べるのかなと疑問に感じました
Rubyは便利な機能が多いのですが、他人のコードを見て何をしているのか
今のところ自分の理解を超えているものが多く、読み解くヒントが欲しかったのです
>>227 XPathで
//a[contains(@href, "cat_")]
という風に指定すれば意図している要素が得られる
が,HpricotのXPath対応がお粗末だから(少くとも手元のHpricotでは)うまくいかない
そこで,
>>252 が言うように
search('a').select{|a| /cat_/ =~ a['href']}.map{|a| a.inner_text}
みたいな感じでごまかしとけばいいんじゃない?
まあ,nokogiri使えばXPathでうまくいくかもね
ソース見て分からないってのは基礎が出来てないからだと思うから、 詳細な解説付きの本でも読む事を勧める。 いちいちソースの解説求めてたら、答えるほうも大変だし飽きるでしょ。自分で調べて苦労してないからすぐ忘れて何度も同じ事訊くだろうし。
256 :
227 :2009/01/09(金) 02:29:12
>>252 ,
>>254 ありがとうございます。
search('a').select{|a| /cat_/ =~ a['href']}.map{|a| a.inner_text}
でやりたいことができました。
XPATHの方はnokogiriいれてやってみます!
自分のサイトのアドレスを取得する方法ってりあますか。 直にURL記述している部分があって、サーバ変えた際に色々と書き換えなどめんどうなので、 この部分をプログラムが今動いているサーバ(サイトURL)アドレスを取得して使ってくれるようにしたいのですが。
258 :
227 :2009/01/09(金) 04:45:41
何度もすいません。 div.abcかdiv.efgがある場合に抽出するにはsearch("div.abc||div.efg")でよいのでしょうか? それかsearch("div.abc")がnilになった時にsearch("div.efg")するように分岐させればよいのでしょうか? いまいち論理演算の使い土器がわからないです。
>257 その方法を考える前に「直にURLを記述」するのを1回だけにするのはどうよ。 コードの頭の辺りで定数として入れておいて、後はコード内で補完って感じで。 そうすると書換えの時も1回で済むし、無駄なアクセスも増えないから重くもならないかと。
>>257 どんなフレームワーク使ってるかわからんけど
クライアントのリクエスト情報が入ったインスタンスの中を探せばあるだろ
WEBrick::HTTPRequest#hostとかCGI#server_nameとか
>>258 search の引数には「CSSセレクタ」か「XPath」が使える(Hpricot独自の拡張も入ってるが)
どちらも「HTMLとかのタグの位置を表記する方法」だ(大雑把)
というわけでCSSセレクタの使い方でも調べとけ
他人にいちいち書き方を聞くことはなくなるだろう
>>257 定数ENVの中に何かいいの入ってるかも
さくらインターネットと自前のLANサーバでスクリプトを共有させてたときは
LOGIN_NAMEで初期値変えてたなあ
ruby で argv を書き換える方法ってありますか? Cだと **argv をいじると、プロセス一覧(ps等)に反映されるのですが ruby でも同じことをやりたいです
$0
>>257 RackならRequest#urlがある
>>265 $0 = 'winny'
OSによっては駄目かもしれない。
270 :
デフォルトの名無しさん :2009/01/09(金) 17:29:53
Mechanizeで教えてください。 ブラウザでサイトに接続。 あるフォームをポストすると,ファイルがダウンロード。 そのページはかわらずそのまま。リンクやボタンをクリック可能。 (あたりまえといえばあたりまえなのですが) という作業をMechanizeでやろうとしてます。で agent = WWW::Mechanize.new agent.get(hogeサイト) agent.submit(agent.page.form(hogeフォーム)) agent.page.bodyでファイルを取得 なのですが,この段階で,agent.pageのクラスが WWW::Mechanize::Fileになってしまって,agent.page.backとかもできない。 フォームをsubmitする前のところから,次の作業をするにはどうすればいいでしょうか? reserve=agent.get(hogeサイト) みたいにしても,reserveは参照だから,同じでした。
transactとかあったような
リクツとしてわかりやすいのは、WWW::Mechanize#visited_page
http://d.hatena.ne.jp/kitamomonga/20080330/ruby_www_mechanize#www_mechanize__visited_page URL を引数に渡すと、そのURLにアクセスしたときの Page オブジェクトを履歴から探してきて返す
agent.get(hoge_uri)
agent.page.form_with(:method => value).click_button.save_as(path_to_save)
agent.visited_page(hoge_uri).links_with...
agent.page の代わりに agent.visited_page(hoge_uri) を使うことで、いつでも過去の Page オブジェクトを引き出せる
いちいち書くのめんどい場合は
prev_page = agent.visited_page(hoge_uri)
とでもして変数に入れとけ
あ、Mechanize 0.8.5 より前の Mechanize を使ってる場合は form_with(:method => value) や click_button が動かないんで、
代わりに forms.method(value) や submit 使ってくれ
transact ってそう使うのか
>>274 たぶん、そもそもこういう用途向けに作られたんじゃないかと思われる
トランザクションと銘打っておきながらブロック内で履歴が新規に開始されていない
(ブロック直前のページがブロック内初回アクセスのリファラ候補になってる)あたりが怪しい
>>267 Rack(笑)
Rackって使ってる人多くない感じがセンデロルミノソ
個々に好きなの使ってる感じは嫌いではない俺
プログラミング言語 Ruby
David Flanagan, まつもと ゆきひろ 著 、卜部 昌平 監訳、長尾 高弘 訳
2009年01月24日 発売予定
ttp://www.oreilly.co.jp/books/9784873113944/ > 1章 イントロダクション
> 2章 Rubyプログラムの構造と実行
> 3章 データ型とオブジェクト
> 4章 式と演算子
> 5章 文と制御構造
> 6章 メソッド、proc、lambda、クロージャ
> 7章 クラスとモジュール
> 8章 リフレクションとメタプログラミング
> 8.5 フック
> 8.6 トレーシング
> 8.7 ObjectSpaceとGC
> 8.8 カスタム制御構造
> 8.9 method_missingとconst_missingの活用
> 8.10 メソッドの動的な作成
> 8.11 エリアスチェイン
> 8.12 ドメイン固有言語(DSL)
> 9章 Rubyプラットフォーム
> 9.1 文字列
> 9.2 正規表現
> 9.3 数値と数学
> 9.4 日付と時刻
> 9.5 コレクション
> 9.6 ファイルとディレクトリ
> 9.7 入出力
> 9.8 ネットワーキング
> 9.9 スレッドと並列処理
> 10章 Ruby環境
>>278 これもっと早く出すべきだったんじゃね?
なにこのわかった人向けの基本の解説本
>>278 > 2.4 プログラムのエンコーディング
> 2.4.1 プログラムのエンコーディングの指定
> 2.4.2 ソースエンコーディングとデフォルト外部/内部エンコーディング
> 3.2 文字列
> 3.2.6 文字列のエンコーディングとマルチバイト文字
お。
Matzが直接本を書くのは、1.6ごろの宝石本以来?
それとほとんど内容同じ鴨試練
今のバージョンに合わせた内容にしてるだけだろうな。 それでも大きな違いはあるだろうけど。
良くも悪くも目次が「普通+言語作者周辺が語るディープツッコミ」で終わってるからな
本の最初の部分で「他の言語経験がなく、これからRubyでプログラミングを始める人を対象とする。」みたいに 書いてあるが、実際にはまったくのプログラミング初心者には向かないかもしれない。 一番不思議に思ったのは、練習問題。 ふつう、その章に出てくる練習問題は、その章までに学んだことを応用できるような 問題にするべきなのに、Stringクラスの練習問題では、次の章に出てくるハッシュや 正規表現を使わせる問題が出てくる。 これじゃプログラミング初心者はつまずいてしまうのではないだろうか。 なんとなく、プログラミングの感覚を「Ruby」に染めさせるような本に思えてくる。
プログラミングPerlもプログラミング初心者が1ページ目から読むようにはできてなかった気がする (まああれは厚さも問題だが)
>>278 100冊カートに入れた。
そしてカートから出した。
カートには99冊残ってるわけか
いまRubyマニュアルを読めてるような人には有り難味の薄い書物であるように見える
原著を斜め読みした限りでは、初心者向けの本ではない。 1.9の解説書として考えるのが妥当だと思う。
詳説Rubyと名付けるのが妥当
オライリーの "プログラミング#{言語名}" という本は総じてガチ初心者お断りだから、 間違って買ってしまう人以外は平気だと思う
設計者の書いた本は、仕様と同時に言語の思想とかも与えてくれるから バイブル扱いされやすい気がする K&R、ラクダ、D&Eみたいに・・・・・本家amazonの評価が異様に良いのも気になる
>>293 だよなぁ・・。
なんかこう、プログラミング初心者向けですよ〜みたいなこと言っておいて
「プログラミングの世界ってどんなんだろう?」という純粋な初心者が、いつのまにか「Rubyだけの世界」に洗脳されそうだ。
もっとプログラミングの本質にこだわった本かと思ったのに。。
プログラミングの本質に触れたいなら特定の言語名を冠した本は違うと思うな。 といってプログラミングの初心者にそれを理解しろってのは酷だけど。
> Rubyは変なキツネの漫画を読んだだけなので
www
ホワイの感動的なやつだな
>>205 C++のプロは「C++のプロ」とは自分で言わんだろ。
自称「C++のプロ」と言えばなんとなくニュアンスはわかる
>>285 >ふつう、その章に出てくる練習問題は、その章までに学んだことを応用できるような
>問題にするべきなのに、Stringクラスの練習問題では、次の章に出てくるハッシュや
>正規表現を使わせる問題が出てくる。
>これじゃプログラミング初心者はつまずいてしまうのではないだろうか。
それは既にhashや性器表現を知ってるからそう思うだけで教育的効果はあると思うよ
初心者の場合hashや性器表現を使わずにその問題を解こうとして悩むのがいい
そうすれば次の章で出てくるhashや性器表現の意味や必要性を理解しやすい
唐突にhashや性器表現が出てくる方が初心者は混乱する
>なんとなく、プログラミングの感覚を「Ruby」に染めさせるような本に思えてくる。
どの辺が?
>>300 大学生のときは上には上がいる、というか、上しかいない状況だったが、
就職してからは、下が果てしない、というか、下しかいない状況だった。
プログラミングで食ってりゃプロなのは間違いないが、それとスキルは直結しない。
303 :
デフォルトの名無しさん :2009/01/10(土) 02:52:58
まつもとゆきひろって2ちゃんねるの管理人だった人?
>>301 ネタとわかってても性器表現が気になってしょうがないんだがw
rubygemsってどう呼ぶんですかね? ルビィゲムズ?
>>266 >>269 遅くなりましたがありがとうございます!!
perl と同じなんですね
助かりました!
青空文庫形式のテキストを処理しています。 青空文庫形式では親文字とルビを次のように書いています。 |親《おや》|文《も》|字《じ》 これを一つにまとめる形で、 |親文字《おやもじ》 という形に変換(置換処理)したいのですが、どうすれば良いでしょうか。 親文字が幾つあるかは一定していません。 この処理を一行毎に行いたいのです。
>>311 irb> s = '|魑《ち》|魅《み》|魍《もう》|魎《りょう》が|跋《ばっ》|扈《こ》する'
irb> 1 while s.gsub!(/|(.*?)《(.*?)》|(.*?)《(.*?)》/, "|¥¥1¥¥3《¥¥2¥¥4》")
=> "|魑魅魍魎《ちみもうりょう》が|跋扈《ばっこ》する"
gsub!は置換が行われればレシーバ(s)を、行われなければnilを返す。
1っていうのはとくに意味はない。後置whileを繰り返すためだけの存在。
s.gsub(/(|.+?《.+?》)(?!|)/){"|%s《%s》" % $1.scan(/|(.+?)《(.+?)》/).transpose}
正規表現であまり悩みたくない人向け
>>312 gsub の第 2 引数は使うなとお達しが来てるはずだが
初心者スレで transpose と sprintf 使って手抜きしてる人には言われたくないだろうな s.gsub(/(|.+?《.+?》)(?!|)/){ base = Array.new ruby = Array.new $1.scan(/|(.+?)《(.+?)》/){|m| base.push(m[0]) ruby.push(m[1]) } # 以下の文字列が gsub(re){str} の str に当たるもの "|#{base.join('')}《#{ruby.join('')}》" } 前にも gsub の 2番目の引数使ってた人がいたけど同一人物かね 無駄にエスケープ連打せずにブロック使えという認識になってたと思う
>>312 s = "|日《に》|本《ほん》|語《ご》の|漢《かん》|字《じ》"
1 while s.gsub!(/|(.*?)《(.*?)》|(.*?)《(.*?)》/, "|\\1\\3《\\2\\4》")
puts s
|日本語字《にほんご》の|漢《かんじ》
> gsub の第 2 引数は使うなとお達しが来てるはずだが kwsk
正規表現で漢字のかんむりやへんやつくりをマッチさせるにはどうするんですか?
>>317 無茶言うな
どっかの誰かに「部首と漢字文字との対応表データ」を作ってもらうしかないね
ネット上には適当なデータを作ってる熱心な人がいるから、それをRubyでどうにか使うしか
発想としては斬新でけっこう好きだ その視点を失わずにプログラミングして欲しいなと思う
このスレの少し前でRackの話が出てたけど 実際のところ、Rackって日本ではどのくらい使われてるんだろうね 日本語の解説記事もいくつかあるから、少なくともドマイナーって程ではないと思うが
流石って さす+が さ+すが どっちになってます?
>>321 熟字訓だから「さすが」で分かれない
明日が「あし - た」でも「あ - した」でもないのと同じ
323 :
デフォルトの名無しさん :2009/01/10(土) 19:33:38
(3.2-2.0) == 1.2 がfalseの理由を教えて下さい。
>311です。皆さんありがとうございました。
>>323 等しくない
たぶん浮動小数点数の誤差のせい
irb(main):024:0> sprintf("%.16f", 3.2 - 2.0)
=> "1.2000000000000002"
irb(main):025:0> sprintf("%.16f", 1.2)
=> "1.2000000000000000"
>>323 浮動小数点だから
何かを計算した結果の浮動小数点の値と、
それ以外の数式で何かを計算した(あるいは計算していない)浮動小数点の値が、
全く同じになるというようなことはふつう無い
だから、小数を含んでいる数値は絶対にイコールで比較してはいけない
どうしても比較したい場合は、たとえばその差を誤差並に小さな数 Float::EPSILON と比較する
irb> (3.2 - 2.0) -1.2 < Float::EPSILON
false
irb> (3.2 - 2.0) -1.2 < Float::EPSILON*10
true
10倍や100倍以内なら同じ数値とみなしてよい
>>323 なるほど。
てことは、浮動小数点数の比較は安易にするなってことですかね。
>>326 ありがとうございます!
そうゆうもんなんですね。
PHPから入った素人なんで、勉強になりました。
あ、いかん、絶対値とらないと ((3.2 - 2.0) -1.2).abs < Float::EPSILON*10 こういうのでよろしこ
rubyに限らず実数の比較をしないってのは基本
おおむね
>>326 の通りなんだけど、欲を言えば絶対値を取っておくほうがいい
厳密じゃなくていいのなら、文字列にして比較してしまうというのがいいかもしれん 一般的な用途では文字レベルでしか判断しないからな irb> (3.2-2.0).to_s == 1.2.to_s true
なぜ文字列にして比較を?? 数値の比較の話じゃなかったの?
>>332 文字列は
てか浮動小数点の指数の基数って
初心者の頃はずっと10なんだと思ってた。
で、なんで誤差が発生するんだとさんざん悩んでみたり
今からしたら俺アホかと
しまったメインの話題を途中やめにしてた
数値を文字列に変換する過程である程度の誤差を丸めてくれるなら、
>>329 みたいな過程を記述する必要がないってこと
たとえruby内で記録されている値が
1.19999999999 であっても
1.20000000001 であっても
表示するときは最下位を丸めて 1.2 になると。
浮動小数点はちょっとわかりにくいからwikipediaで調べてみそ
http://ja.wikipedia.org/wiki/浮動小数点数
irb> (3.2 - 2.0) -1.2 < Float::EPSILON false これが true になるような左辺ってあるんだろうか
左辺が絶対値ってことだと思うが左辺の方が小さかったらEPSILONの意味がないな
0では?
nil?
>>332 目に見える範囲の小数が等しいかどうかを調べるだけなら
これが「我々がアタマの中で考えてる」処理に一番近い
どちらが大きいかということが必要な場合はあまり(あるいは全く)使えないので用途に注意
>>335 irb> (5.5 - 2.25) - 3.25 < Float::EPSILON
=> true
>>326 <=にしたらtrueになった
irb> (3.2 - 2.0) -1.2 <= Float::EPSILON
true
>>342 それは単に 0.0 なのでは
0.5 も 0.25 も割り切れてるもの
Float::EPSILON < Float::EPSILON false Float::EPSILON <= Float::EPSILON true 0.0 < Float::EPSILON true って話?
Float::EPSILON とは <= で比較するのが正しいのかな
A <= B と A < B || A == B の動作違うのってまずくね
rubyってDLL作れる? rubyで作ったプログラムをVBAやC#みたいな他ので使いまわせるようにしようと思ったら どういう形式がいい?
>> 336 マシンイプシロン Float::EPSILON は 1.0 + Float::EPSILON != 1.0 になる最小の数って意味だから違う。 IEEE754 の浮動小数点表現では、32 ビットの単精度でも指数部は 8 bits、仮数部 23 bit あるから EPSILON はせいぜい 2.0**(-23) 程度 >> Float::EPSILON + 1.0 == 1.0 => false >> Float::EPSILON/2 + 1.0 == 1.0 => true >> 1e-20 < Float::EPSILON => true だから、ちゃんと比較するなら絶対値で割ってから比較するべき abs((a-b)/b) < Float::EPSILON とか。b < Float::EPSILON のときの処理も必要だけど。
1.0 + Float::HOGE == 1.0 になる最大の値 HOGE のことを何と言いますか
マシンウプシロン
Delphiだと引数にEpsilonを指定できる浮動小数用の比較関数(SameValueだっけか)が あるんだけど、Rubyにはないのん? いちいち絶対値とってそれがEpsilon以下って書かなきゃならない? 組み込みかライブラリであれば教えて頼む
Ruby Cookbookに載っているコード class Float def approx(other, relative_epsilon=Float::EPSILON, epsilon=Float::EPSILON) difference = other - self return true if difference.abs <= epsilon relative_error = (difference / (self > other ? self : other)).abs return relative_error <= relative_epsilon end end 100.2.approx(100.1 + 0.1) # => true 10e10.approx(10e10+1e-5) # => true 100.0.approx(100+1e-5) # => false
浮動小数点を比較しなきゃ逝けない用途って何? コンピュータに向いてない作業の一つだな。
シミュレーション?
357 :
デフォルトの名無しさん :2009/01/11(日) 00:27:31
RubyでGUIアプリケーションは作成可能でしょうか? 友人からは、GUIアプリケーションは VC++、VBとかじゃないと無理と聞いたのですが・・・
>>354 self と other を比較する前に絶対値とらないと駄目なんじゃ。
def check(name) /name/ =~ "hiroyuki" 以下略 で/name/ をnameでマッチさせるのではなく引数の値を使うにはどうすればいいでしょうか?
浮動小数点数の比較の話をしてるんだからBigDecimalの出る幕は無いだろ
>>354 サンクス。組み込みではないっつーことか。
>>355 まーゲーム作るときとかちょっとした数値計算、
後ユニットテスト書くときなんかにはいるけど、
確かに最後の例以外Rubyには不適だかなあ
>>360 def check(name)
name =~ "horioyuki"
で、
check呼ぶ時に正規表現リテラル渡せばよいのでは?
check(/.+oyu.+/)
ちょっとお聞きしたいのですが、 wikiとかの表示によくあるプログラムの実行時間を 自分のスクリプトで表示したいのですが、 簡単にmsecの実行時間を測る方法はないでしょうか? スクリプトの終了前に puts Process.times.to_yaml とかやってみたんですが、表示がさっぱり?です。 utimeとstime を足したものが実行時間なのかな?
あれは単にWikiテキストの処理開始時と 処理終了時の差を取っただけなんじゃないか?
>>366 基本的な計測はbenchmarkライブラリ(標準添付)でOK
あと、「Ruby プロファイラ」で検索すると色々出てくる
>>363 おおもとは、
>>323 > (3.2-2.0) == 1.2 がfalseの理由を教えて下さい。
だから、小数を含む数の扱いについて一通り言及すべきだと思うんだ。
>>365 nameに渡す文字列はARGV.shiftで受け取ったものなんですよ・・・。
グローバル変数にすればよかったりしますかね・・・。
371 :
370 :2009/01/11(日) 01:54:40
グローバルしてみましたが結局 =~ の 左辺,右辺に変数がきてもいいのでしょうか?
def check(name) /#{name}/ =~ "hiroyuki" end p check("hiroyuki") # => 0
373 :
370 :2009/01/11(日) 02:17:30
>>372 ありがとうございました!!!!!!!!!うまくいきました。
=~の左辺の#{name}っていうのは変数としてみるってことですか?
>>368 サンクス
benchmarkクラス使ってみる
377 :
370 :2009/01/11(日) 02:31:30
>>375 ありがとございます。
昨日Rubyはじめたばっかりでいろんなサイトからつぎはぎで趣味プログラムしてたんで
リファレンスマニュアルというのをみてませんでした。まず、一読してみます!
>>376 無理
素直にモジュール使って、Mod1.method1としなされ
>>376 それではmethod2を定義しているだけで,method2を呼び出してはいない
def method1
puts "call method1"
def method2
puts "call method2"
end
method2
end
380 :
379 :2009/01/11(日) 02:35:59
ごめんはやとちりした
381 :
376 :2009/01/11(日) 02:45:25
>>378 無理かぁ・・・ありがと
Mo1.method1・・・method2はどこへ?
実はmethod1の処理がイテレータを含んでいて、変数を一周するたびに初期化して使うんだけど、
場合によっては初期化する前にmethod2の処理でその変数を使いたいから↑のようなことに・・・
モジュールだとダメそうなのでおとなしく引数と条件文で動かします。。
>>380 ドンマイw
>>376 def method1
処理1
Proc.new do
処理2
end
end
method1
method1.call
近いことを無理やりやろうとすれば、
こんなのは思いつくが、普通はやらない
端的に言って不気味すぎる
いやいや、初心者のこんな突拍子もないアイデアから、すごいアイデアがでたりする。 1000個に1個ぐらい。 だから初心者は1000個のアイデアを出すんだ!
callが気に食わない def method1 処理1 pr = Proc.new do 処理2 end pr.instance_eval "alias :method2 :call" pr end method1 method1.method2
385 :
376 :2009/01/11(日) 03:22:55
>>382 おお、できるんだ!?
ありがと〜
ぶ、不気味なのか・・・
>>384 求めていたものが完璧に・・・お見事です。
お二方、ありがとうございます。
開発環境なに使ってますか? 自分はLinuxでは基本Netbeansで、ちょっとした修正はemacsで。 eclipseとかもあるけどどんな開発環境使っているか気になったので・・・。
vi
今時 vi はないだろう vi は。 俺は断然 vim だな。
メモ帳
俺はEclipseにRubyプラグイン editer使ってる人は補完なくて大丈夫なの?
いや、もちろんエディタにも補完はあるよ VimのRubyに対する補完はかなり強力。それ以上に操作性が好きで使っているけど
ずっとEmacs ちなみにMatzもEmacs まあ人に何が良いか,って聞かれたらNetbeans勧めるかもな
viの学習曲線の最初でくじけたのでemacsで
俺は断然 vi
あんな日本語も通らない化石エディタよく使う気になるな
個人用途なので基本的にはどうでもいいんですが気になるので質問します HTMLとかから正規表現とかでデータ抜き出して、データ保管クラスのインスタンス変数に保管します。 initialize の時点でたくさんのインスタンス変数に値を入れたいんですが、 def initialize(params, data) @a = params[:a] @b = params[:b] @c, @d, @e = parse_in_init(data) end と def initialize(params, data) @a = params[:a] @b = params[:b] make_c_d_e(data) end def make_c_d_e(data) @c = someprocess1(data) @d = someprocess2(data) @e = someprocess3(data) end って、どっちが見通しいいもんでしょう? ちょっと面倒でも明示的に代入の形を見せる前者のほうが初期化プロセスっぽく見えて好ましい?
>>396 YES
ただ、make_c_d_e みたいなそれっぽいのが initialize の直後に定義されてれば
「あーinitializeの続きかー」と思って読むから別に気にはしない
Util.parsehtml とかどっか遠いとこに定義されてるクラスメソッドがinitializeで呼ばれてるとやる気なくす
def initialize(params, data) @params = params @data = parse_in_init(data) end
>>398 なにそのユーザー丸投げルーチン
いちいちハッシュの引数で参照するのがめんどいまたは間違いやすいからインスタンス変数にしてんじゃねの
>>399 @params を書き込み可能にしておけば外部からデータ追加するのも楽々だぜ?
>>400 外部からデータを追加する必要があって、なおかつその方法しか考えられないようなときなら一理あるけど
そうでなければ、ここでハッシュを使うのは問題が大きすぎる
Javascriptだと a={'hoge': huga, 'hage': fuga}; a.hoge a.hage にアクセス出来ていいんだよね
Ruby でもやろうと思えば出来るっしょ
アクセサ作ればいい めんどくさいけど
StructA = Struct.new(:hoge, :hage)
a = StructA.new('huga', 'huga')
p a.hoge
p a[:hoge]
p a[0]
"huga"
"huga"
"huga"
オーイエー
>>402 どっかのgemにそんなのあったな
来たなStruct厨 総員迎撃準備
Structって嫌われてんの?
Struct.newにJSONぶっこめる?
>>407 他言語から来た人がArrayやHashを使い込むことなく安易に使うものの代表だから、嫌がられてはいるね
まずはArrayとHashを使い倒してからにして欲しいなと思う所存
>>408 分けてくれ
>>410 動物は一度鎖に繋がれてしまうと鎖が杭から外れていても
逃げられないと思い込んでしまうものなのです
>>410 それは日本語パッチ当たってるんじゃね
てか、「お前らが使ってるのは vi じゃなくて vi クローンのどれかまたは vim だろ」というツッコミを
誰かがしないと終わらんな
>>413 OS標準。つか、Solarisは遠い昔から、日本語localeが入ってりゃちゃんと日本語使える。(viに限らず。そのせいで痛い目にあうこともまれにあるが)
emacs入ってない環境はたくさんあるけど、viが無い環境は稀。 まあ開発環境は何でも好きなの自分で入れろよと思うけどな。
だからメモ帳最強って何度言わせるんだよ!!
Windows環境でJmEditorとRDEとNotepad++を使い分ける俺に隙はなかった
>>415 のようなことを稀に聞くが、vi でファイル編集できない人間などおらん
Windows環境で、class Hoge(もしくは、def hoge、each do |x|)と打ってリターンをすると、 以下のように、endを付けインデントした位置にカーソルを持ってくるエディタはありますか? class Hoge[Retrun] ↓ class A | end
Meadow(or Xyzzy)を入れて自分で作れってのはなし?
Solarisのviはずいぶん昔から日本語通るぞ。SunOS4は忘れたが。 ただ、Localeに縛られるので、Shift_JISのファイルなんかが来ちゃうと面倒。 LANG=とsettermでなんとかなった気もするけど、もう忘れた。 って無駄レスだな。
以下、Personクラスの配列membersを、名前→性の順でソートすると、名前のソートがくずれます。 くずれないようにソートするにはどうすればいいのでしょうか? class Person attr_reader :name, :sex def initialize(name, sex) @name, @sex = name, sex end def show [@name, @sex] end end members = [] members.push Person.new("sasaki", "male") members.push Person.new("kato", "famale") members.push Person.new("fukada", "male") members.push Person.new("akai", "female") p members.map {|p| p.show } #=> [["sasaki", "male"], ["kato", "famale"], ["fukada", "male"], ["akai", "female"]] p members.sort_by {|p| p.name}.sort_by {|p| p.sex}.map {|p| p.show } #=> [["kato", "famale"], ["akai", "female"], ["fukada", "male"], ["sasaki", "male"]] #=> 望ましい結果 [["akai", "female"], ["kato", "famale"], ["fukada", "male"], ["sasaki", "male"]]
members.sort_by {|p| [p.name, p.sex]} じゃね?
配列の比較に関してはドキュメントが弱いんだよね [1,2,2] < [1,2,3] [1,1,2] < [1,2,2] [1,4,4] < [2,1,1] x でソートしたあとに y でもソートしたいという場合は、Rubyでは data.sort_by{|a| [a.x, a.y]} と書く
>>425 それだと、
[["akai", "female"], ["fukada", "male"], ["kato", "famale"], ["sasaki", "male"]]
となり、性のソートがくずれてしまいました。
>>427 どうソートしたいのか考えれ
崩れるも何も、ソートする順番の問題に過ぎない
class Person
attr_reader :name, :sex
def initialize(name, sex)
@name, @sex = name, sex
end
def show
[@name, @sex]
end
def Person.sort_sex(sex)
if sex=='male' then 1 else -1 end
end
end
members = []
members.push Person.new("sasaki", "male")
members.push Person.new("kato", "famale")
members.push Person.new("fukada", "male")
members.push Person.new("akai", "female")
members.sort_by {|p| [Person.sort_sex(p.sex), p.name]}
431 :
デフォルトの名無しさん :2009/01/11(日) 19:37:19
Hpricot::Elem.new(Hpricot::STag.new('form')) をノコギリで書き換えようと思い Nokogiri::XML::Node.new('form')としたら ArgumentError: wrong number of arguments (1 for 2) のエラーが出ました。 RDocには,new(name)、と引数は一つなのですが,どうしてでしょう。このnameはStringで与えてもだめ?
>>419 Aptanaとか、EclipseベースのIDEならいけるんじゃないかな。
>>419 どうせEmacs使わんだろうけどコメントしとく
emacsのruby-electric-modeだと
defスペース
と打った時点でendが補完される
その後 ruby-mode の ruby-reindent-then-newline-and-indent を使って改行すればインデントも同時にされる
この程度ならEmacsユーザならごく当たり前のこと
というかRuby用の動作があるエディタならみんな似たようなことできるでしょ?
>>419 Vim の場合
runtime/ftplugin/ruby.vim
runtime/indent/ruby.vim
を調べてみたけど、そういうのなかった。
%HOME%/vimfiles/ftplugin/ruby.vim か
$HOME/.vim/ftplugin/ruby.vim に、
以下を入れておけば、OK
inoreab <buffer> module module<cr>end<up><end>
inoreab <buffer> class class<cr>end<up><end>
inoreab <buffer> def def<cr>end<up><end>
inoreab <buffer> do do<cr>end<up><end>
inoreab <buffer> case case<cr>end<up><end>
inoreab <buffer> begin begin<cr>end<up><end>
hash = {} [:a, :b, :c].each {|k| hash[k] = @hash[k] } という処理をもっと簡単に書く方法があれば教えてください。
437 :
デフォルトの名無しさん :2009/01/12(月) 01:14:36
hash = @hash.dup()
>>419 EclipseかNetBeansでsnipet使うのはどうだろうか?
リターンでは無理だが別のキーで、コードの展開はできるぞ
>>436 それが一番短い部類
「○○というキーを持つペアを [k, v] の配列で返す」みたいなメソッドって標準には無いんだよね
hash = Hash[@hash.find{|k, v| [:a, :b, :c].include?(k)}]
書いててなんか短いなとは思ったんだ hash = Hash[*@hash.find{|k, v| [:a, :b, :c].include?(k)}.flatten] うーん
hash という変数名は全てのオブジェクトに存在する hash っていうメソッド名と被るから、 特に拘りがあるのでなければ避けておいたほうが吉 プログラム(1行のみ): p hash 結果: 22412530 適当なハッシュの変数名は h が人気 h と書かれていれば、ほぼ全員がハッシュかなと推測してくれる
遅延評価はあるから バックくおーとみたいなのはできるかもしれない
445 :
デフォルトの名無しさん :2009/01/12(月) 10:04:50
ActiveRecordでsqlite3のDEFAULT CURRENT_DATEに 相当するのは何? 今,record.date = Date::todayみたいにいちいちやってるのだけど, なんだか,もっとスマートな方法がある気がするので,質問
446 :
デフォルトの名無しさん :2009/01/12(月) 11:02:22
質問です。 スキルアップのためにRubyでビジネス向けシステムを作れという課題が出ました。 勤怠管理システムのような物を作ろうかなと考えています。 私の言語スキルはCのみでオブジェクト言語は概念しかわかりません。 Cは基本情報合格しました。 とりあえずRuby1.8をインストールしようとしましたが失敗しました。 (コンソール画面から先に進めません) こんな初心者にお勧めのRuby書籍を教えてください。 前述の通り、インストールから失敗してしまいましたので インストール方法も解説している物が欲しいです。 最終的に簡単なシステムを作らなければいけないので 入門系と実践系の物をお勧めいただければと思います。 どうかよろしくお願いします。
>>446 何をもって「失敗した」と言ってるの?
Rubyインストールしただけだったら別に開発環境が入るわけじゃないぞ。
あと使ってるOSは?
Ruby学習者に必要なもの(ある程度持っていると暗黙のうちに仮定されているもの) ・ OSへのある程度の習熟 ・ コマンドライン操作 ・ HTTPとウェブに関する基礎知識 ・ データベース利用に関する基礎知識(Rails限定) ・ PerlかUNIX Cの教科書的な基礎知識
>>448 …持ってなくてもいいが、まあ、持ってないとひたすらに遠回りではあるな
歩行練習と自転車乗る練習を同時にするようなもんで、学習量と学習時間が倍くらいになる
>>446 本当にCで自分用プログラム作れるだけの技量があるか怪しいと思うんだが、コマンドライン操作はできるかい
できるだろ Cができるってことはmakeとかも使えるってことなんだから
>私の言語スキルはCのみでオブジェクト言語は概念しかわかりません。 >Cは基本情報合格しました。 Cができるなんてどこにも書いてないぞ
Cが出来てRUbyで着ない香具師なんていない 初心者詐称 釣り決定
> こんな初心者にお勧めのRuby書籍を教えてください。
>>2
>>446 よろしければその会社でのあなたの給料と実質労働時間を教えてください
>スキルアップのためにRubyでビジネス向けシステムを作れという課題が出ました。 会社員だなんてどこにも書いてないぞ
インストールも出来ない初心者向きの本を勧めれば回答終了じゃないのか、これ。
457 :
446 :2009/01/12(月) 12:35:30
早いお答えありがとうございます。
こちらの回答が遅くて申し訳ありません。
下で個別にもレスしますがCの実践的な開発経験はありません。
資格試験(基本情報)で問題として出されるレベルのプログラムを
一人で完成させる事はできます。
わかりにくいようでしたらプログラムの基礎の基礎(ループやメモリ)だけは
わかるズブの素人としてご指導頂ければ、と思います。
>>447 RailsをインストールするためにDOS画面にコマンドを打ち込んでも
NoFound〜的文章が表示されて先に進みません。
今、手元にインストールしようとしたマシンがないので
正確なエラー文はわかりません。
インストールガイドはネット上で見つけた動画を参考にしたのですが
これもインストールするパソコンにブックマークしていたので
今この場ではわかりません。
わからない事が多くてすいません。
「これが必要」という情報があれば調べてきます。
OSはWindowsVistaです。
オライリーの「初めてのRuby」。まじおすすめ。 Railsやるならなんだろう?
459 :
446 :2009/01/12(月) 12:36:27
>>448 ・ OSへのある程度の習熟
ある程度、がどのくらいかわからないのですがマニュアルを見て
再インストールはできました
・ コマンドライン操作
ほとんど使用したことがありません。
試験勉強のためにログオンやログオフ、プリンタの操作を数回だけ。
・ HTTPとウェブに関する基礎知識
基礎知識なら何とか…
ウェブページが表示される仕組み程度はわかります。
・ データベース利用に関する基礎知識(Rails限定)
データベースの概念やSQL文までは一通りわかります。
>>449 図々しいのですが、持っていない人間が効率的に学習できる順番など
もしありましたら教えていただけませんか…?
>コマンドライン操作
ほとんど使用したことがありません。
試験勉強のためにコマンドライン一覧のようなマニュアルを見てやった時は
とりあえずできました。
自分用プログラムを作ったことはありません。
・ PerlかUNIX Cの教科書的な基礎知識
Perl・UNIXはわかりません。
Cの教科書的なことならわかります。(解説書も持っています)
460 :
446 :2009/01/12(月) 12:50:45
>>450 Cの知識はありますが実践経験はありません。
makeのやり方も解説を読む限りでは理解できたのですが
そこまで辿り着けませんでした…。
>>451 試験に合格できただけなのでたぶんできないと思います。
>>452 Cもできないようです…
>>453 入門・はじめて〜と付いている物が多すぎて…
一番最初に読むと良い物を教えていただけないでしょうか。
(できればインストール法が詳細に載っているとありがたい)
>RailsをインストールするためにDOS画面にコマンドを打ち込んでも >NoFound〜的文章が表示されて先に進みません。 >今、手元にインストールしようとしたマシンがないので >正確なエラー文はわかりません。 インストールしようとしたマシンが使える環境になったらまたおいで
462 :
446 :2009/01/12(月) 12:51:32
>>454 >>455 会社員ですがプログラミング職ではありません。
ずっと経理でやってきました。
自主的に基本情報を取得したところ社長がそれを聞きつけて
「手当て出すからもっと本格的に勉強しろ。
今度経理システムの作成をソフトウェア会社に依頼するから
それまでに一通りわかるようになって開発に加われ。
依頼予定の会社はRuby使うって言ってるからRuby勉強しろ
」
要約するとこんな感じです。
「とりあえず実際に使える物を作ったら覚えるだろ」という事らしい。
29歳の高卒女。情報系の学歴はなし。
実質労働時間は9時間くらいかな。
今までの仕事(経理)をする時間を引いたら毎日3時間程度。
でも来週で引き継ぎ終わるから、そしたら9時間Ruby学習に充てていい。
>>456 そういう物を教えていただけるとありがたいです。
463 :
446 :2009/01/12(月) 13:01:04
>458 ありがとうございます。 レビューなどを見ると入門より少し難しいようなのでこれを一冊と もっと基礎的な物がないか捜してみようと思います。
>>463 だから
>>453 も言ってるが
>>2 を見れ
しかし、プログラミングもできないのに SI 名乗る人たちがいるのに、
>>462 のような理由でプログラミングの勉強をしろとは、
社長はなかなかの大人物。(か、ちょっと勘違いしちゃってるのか、分からんが)
先は途方も無く長いけどがんがって下さい。
断ったほうがいいと思う
良いチャンスだとは思うが、 ちゃんとした研修を受けれないなら断るのも手か。
>>466 だな
自社のシステムを学習者に任せるとか根本的にありえない
こっちから人出せば開発依頼費が浮くとか勘違いしてるだけに過ぎない
>>468 馬鹿発見
こういうのは社長がシステム会社側に余分に数百万金積んでんの
なにそのお妾さんシステム
471 :
446 :2009/01/12(月) 14:47:06
いろいろアドバイスありがとうございました。 とりあえず今から都市部の大きな本屋に行って自分に合いそうな 初心者向け書籍を探してみようと思います。 あとはみなさんのアドバイス頂いた物をネット注文予定。 最後の方、個別にお礼をレスできなくてすいません。 うちは小さな会社で社長もワンマンなので残念ながら研修や断るという選択肢はありません。 社長が大昔に配送業務を外部委託したときに超ぼったくりされた苦い思い出から 外部と提携する時は必ず社員も加える事になっています。 もし私が断ったらエクセルワードくらいしか使えない経理部長がやらされそう… 一応期間的には半年くらいは貰えるようですが、厳しい道のようですので 最悪の場合は転職の覚悟もしておくことにしますw 丁寧にいろいろありがとうございました!
> 外部と提携する時は必ず社員も加える事になっています いやそんなこたわかってる(というかそんな理由しかありえん) それでもなお、 「依頼する会社が○○で開発するから話合わせるために○○を覚えろ」 というのは完全に間違っている というか、それでは何の解決にもなっておらず、遠からず同じ大火傷が起こるだろう
会社の事情も何も分からんのに、そんな脊髄反射でスレ違いな話することもなかろう
企業様におかれましては仕様固めるとか意思伝達スムーズにするとかのほうにリソース割いてほしいのう 開発言語なんて1ミリも知らなくていいのにっていうかむしろそっちに入り込まれると邪魔
>>445 created_on というカラムを作ればレコードの作成日が
勝手に残る(ようにActiveRecordが面倒みてくれる)けど、それではだめ?
今日さ、普段使ってるファイルでFile#flock(File::LOCK_EX)のテストしてたんだよね。 そしたらFile.open("hoge", "w")したとたん中身消えちゃって涙目になった。
この前、アホアホに彼女と行きましたそうしたら、奥の座敷に、芸能人が10人ぐらいいました。 その中でアホアホ鍋食べていたら、芸能人の人が一緒に飲もうよと、誘ってくれました。 凄くうれしいかたよ。 それから、毎週アホアホに言っています。
478 :
デフォルトの名無しさん :2009/01/12(月) 20:31:09
プログラム上でウェブサイトにpostしたいのですが、 そういうライブラリがあれば教えて下さい
標準の net/http gem の httpclient gem の Mechanize 好きなの選べ
ありがとうございます!
>>478 Mechanizeが直感的で一番かんたんじゃないかな?
わかりにくいけど
>>481 >Mechanizeが直感的で一番かんたんじゃないかな?
>わかりにくいけど
パラドックス?
おまいら高卒アラサーだと雌でも食いつき悪いのな。
どんだけ二次元嗜好なんだよwww
まあコンピュータ言語知識のあるPGやSEでも糞な仕様作るのはいくらでもあるので、ユーザ側でコンピュータ言語知識有ってもいいでしょ。
結局、IT業界って客商売だし、お金出す側の客が、システムの奥深くまで把握して金出したいって要求なんだから迷惑とか関係無いわな。
ほぼ、Cの実務知識無さそうだし、現状取り組むならrubyもCも変わらないね。
>>448 に上げてある、システム開発するうえで前提と成る基礎スキルの習得がまずは必要だと思う。
依頼予定の会社のruby使用のシステムの詳細をもう一度確認したら?
Ruby on Rail使う予定というなら、
【Ruby】Ruby on Rails Part6
http://pc11.2ch.net/test/read.cgi/php/1224838013/l50 とか、どーぞ。
貴重な体験だと思うので、日記でも付けて、あとで書籍化でもすると、ルビー神の一人に成れて世界変わるかもしれないwww
>>436 >hash = {}
>[:a, :b, :c].each {|k| hash[k] = @hash[k] }
>という処理をもっと簡単に書く方法があれば教えてください。
たぶん、ない。
class ::Hash
def elems_at(*keys)
h = {}
keys.each {|k| h[k] = self[k] }
h
end
end
とでもして、hash = @hash.elems_at(:a, :b, :c)としとけ。
>>437 >hash = @hash.dup()
これは違うだろ。選択した要素だけを選び出すのであって、要素をすべてコピーするわけではない。
>>440 >hash.merge!(@hash)
上に同じ。
>>442 >hash = Hash[*@hash.find{|k, v| [:a, :b, :c].include?(k)}.flatten]
include? は線形探索だから、それを何度も行うのは効率悪そう
>>hash = Hash[*@hash.find{|k, v| [:a, :b, :c].include?(k)}.flatten] >include? は線形探索だから、それを何度も行うのは効率悪そう [:a, :b, :c]に対しての探索だから3要素ならたいしたことないんじゃないの
そりゃ本来のデータなんてスレに書きこまんだろ
例示のために3要素にしてるに過ぎない可能性が高い
ていうか、
>>436 で用が済むんだけどね
これより妥当で遅れない汎用な書き方はまず無いと思われ
基本的な記法を使い倒せる技術最強伝説
うん、
>>436 が一番、やりたいことが素直にコードになってていいと思う。
hash = [:a, :b, :c].inject({}){|h, k| h[k] = @hash[k] ; h }
こんなんもあるけど、自分ならやらない。
でもまあ初心者はmapとか使わずeachしか使ってなかったりするからなあ。 eachじゃない書き方があれば教えてあげるのは悪いことでもない。
489 :
デフォルトの名無しさん :2009/01/13(火) 22:34:17
今、ドラクエやってるんだけど、太陽の石ってどこにありましたっけ?
みつかりました ありがとうございました
491 :
デフォルトの名無しさん :2009/01/14(水) 00:13:04
>>436 keys = [:a, :b, :c]
hash = Hash[*keys.zip(@hash.values_at(*keys)).flatten]
これでもできるような気がするけど、自分ならやらない。
Time.nowを簡単に日本語で出力する方法はないでしょうか? 今は、 puts Time.now.strftime('%Y-%m-%d(%a) % %H:%M:%S') とやっています。%aは ["日", "月", "火", "水", "木", "金", "土"][Time.now.wday] に置き換えればよいと思いますが・・・ > ruby -v ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32]
標準ではない。そのへんはその要領で自分で書いておくれ。
>>493 TimeでなくDateTimeクラスなら以下のように:
$ irb -rdate -rational -Ku -f
irb> RUBY_DESCRIPTION
=> "ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9.5.0]"
irb> Date::const_set('ABBR_DAYNAMES', %w(日 月 火 水 木 金 土))
warning: already initialized constant ABBR_DAYNAMES # ミナカッタコトニ
=> ["日", "月", "火", "水", "木", "金", "土"]
irb> t = Time.now
=> Wed Jan 14 03:47:50 +0900 2009
irb> dt = DateTime.civil(t.year, t.month, t.day, t.hour, t.min, t.sec, Rational(t.utc_offset, 86400))
=> #<DateTime: 21209863247/8640,3/8,2299161>
irb> dt.strftime('%Y年%m月%d日(%a) %H:%M:%S')
=> "2009年01月14日(水) 03:47:50"
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ まピョーん☆ / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
>>488 map は写像製造だし、写像を作ること以外に使うべきではない
498の読解力のなさは委譲
Array.new と Array::new の違いは何ですか?
>>500 スクリプト作者の出身言語および硬直思考の頑な度
>>500 タイプ数
ネタなのかも知れんが、一応マジレスしとくと定数とかのからみで "::" を使うと
面倒引き起こす可能性が無いとはいえないから、理由が無いなら "." を使っとこ
メソッド起動に :: を使うことは Ruby では極めて稀というかメリットは何もないよ 他人の書いたスクリプト中で クラス::メソッド という記法を見つけたら心の中でm9(^Д^)プギャーしとくといい 自分から使う理由はないからさ
クラスメソッドとインスタンスのメソッドの呼び出し方に違いはありますか
507 :
デフォルトの名無しさん :2009/01/14(水) 16:59:10
rubyでアンテナサイトつくってみたいんですけど 何をしたらよいのかわかりません。 何かよい書籍とかありませんか? 実際のアプリケーション作成となると、全くわかりません。
>>506 ないっす
File = Class.new(IO)
def Fie.basename(...)
...
end
File.basename("aaa/bbb") # => "bbb"
クラスもClassクラスのインスタンスなもんで。
(゚∀゚)ラヴィ!!
まあねえ ネットに関するプログラムは自力で学んでもらってなんぼだしな 何していいのかわからないなら作るのはまだ早い
アンテナみたいな、作り方によっては他人に迷惑をかけまくるものは、 「何をしたらよいのかわかりません」レベルの人間には手を出して ほしくないね。 とりあえずもっと別のところから修行するんだ!
その別のところというお題で適当なものを考えてあげようか。 初心者が上達するには題材が必要だろう。 youtubeのRSSを定期的にとってきて、関心のあるキーワードに引っかかったエントリをメールで送信してくれるようなプログラム。
>>507 まずはHTTPの仕組み、それと既存のアンテナがどんなことやってるのかを学ぶべき
513のお題も学習に良さそうだ
ただメール送信はちょっとややこしいから、エントリの表題をシェルに表示するぐらいでいいかも
515 :
デフォルトの名無しさん :2009/01/14(水) 21:58:54
すいません、まだドラクエやってるんですが、竜王ってどこにいましたっけ?
竜王城
玉座の後ろの隠し階段だよ
ryuou.castle.search('ryuou')
519 :
デフォルトの名無しさん :2009/01/14(水) 22:15:02
一緒に世界征服しようとしたらバッドエンドだ、気を付けろ
昔ファミコンでやってた時何も知らずにバッドエンドだった時は放心した。。。 パスワードとらずにやってたから初めからやり直しだったなwww 苦い青春だったぜ
Mac OS X で ruby-1.9.1-rc1 をコンパイルすると、i686ではなくi386になる。 $ ruby -v ruby 1.9.1 (2008-12-30 patchlevel-0 revision 21203) [i386-darwin9.6.0] i386用にコンパイルされていると遅いよね? i686用にコンパイルしたいんだけど、どうしたらいい?
誰かrarff使っている人いますか?
>>520 2か3で誰かと入れ替わるイベントもあったよな。どっかの王様だっけ?
あん時はパニックになって友達に泣きついたが、あとから考えると
恥ずかしかったな。
古いバージョンで動いてたスクリプトを最新版で動くようにする変換機とかありますか?
>>524 原理的に無理でしょう
人間の手で書き換えるしかないんじゃないかと
>>523 3で王様になるイベントだな。
あれは最初どうにもならんでリセットしたわw
irb> file.scan(re[:method]) RegexpError: Stack overflow in regexp matcher ぬう これでカッコ多いか生意気な
下位互換性確保のために、古いバージョンの実行環境を残しておくのは重要。
うぉ途中で送信した
>>529 について質問なのですが、
ruby -x (スクリプト名) と指定することはどういう意味があるのでしょうか?
特に -x なのですが、マニュアルを読んでも意味がわかりません。
これはバッチを実行した時にその作業ディレクトリをスクリプトのディレクトリに移動するという意味でしょうか?
#!ruby より上を読み飛ばすってことじゃないかな? 全体でバッチファイルになってるけど、rubyスクリプトとして実行されるのは下の2行だけっていう。
最近、『ケント・ベックのSmalltalkベストプラクティス・パターン』に中身が似てるっぽい 『実装パターン』て本が出ましたが、Ruby使いにとってはどちらがより役に立ちますか? 前者がSmalltalkのコードで説明してて、後者はJavaですよね。 両方読んでみた人いますか?
>>532 似たことが書いてありますが、SBPPは動的言語向け、IPは静的言語向けの内容なので
どちらかを選ばなければならないなら、Ruby使いにはSBPPのほうを薦めます。
もちろん、お金と時間に余裕があるならば、両方読むのが吉です。
>>531 あーーそういう意味か!わかりました。
batファイル自身がRubyスクリプトになっててそのまま実行できるようになってるんですね。
win32oleをつかってADO経由でsqlserverのテーブルに 対して読み書きを行おうと思っています。 connectionオブジェクトのゲットは出来ました。 recordsetオブジェクトのゲットも出来ました。 recordsetの各feilds("項目名").valueに値をセットして updateメソッドで反映出来るのも確認できました。 「よし、出来た」 そう思ったのもつかの間。 「テストテーブルだけど初期値(null)に戻しておくか」 そう思った時に壁につぶかりました。 rsTest.feilds("項目名").value = nil こうすると例外が出てしまいます。 初期値(null)が入っている時は p rsTest.feilds("項目名").value 結果:nil になったのですが…。 DBのnull≠nilで初期値がp関数でnil表示されるのは 型が返還された結果だというのはおぼろげながら 想像はつくのですが、ではADOのFeildオブジェクトに nullをセットするにはどうしたらいいのでしょうか? レコードセットでの操作を諦めてSQL文で操作した 方がいいのでしょうか? 環境 OS:WINDOWS2000 rubyのバージョン1.8
うちはnilで出来てる
ADOのconnectionが作れたならSQL発行すればいいじゃん
538 :
535 :2009/01/17(土) 02:06:05
>>536 nilのままでOKなんですか。
となると呼び出し方がおかしいとか
バージョンとかの相性の問題ですかねぇ
>>537 最終的にはそうなりそうです。
ただ、nil以外は値をちゃんと設定できるだけに
何か手順があるのかなと思いまして。
まぁ、ちょっと悔しくてなんとか
足掻けないかなぁと思っただけなんです。
>>533 ありがとうございます。参考になりました。
543 :
535 :2009/01/17(土) 09:43:17
>>539-541 ありがとうございます。
Ruby側じゃなくて、ADOサイドの問題の可能性が高そうですね。
色々試してみます。
テーブルの定義の問題だと思う
自分のコーディングが怪しいと思わないところが問題だと思う
PStore.new('test.pstore').transaction(read_only=true) do |pstore| ... end の read_only=true がただのメソッド説明用の表現であり、 実際は引数に true を渡す普通のアレだということを数年使ってきてやっとさっき気づいた PStore.new('test.pstore').transaction(true) do |pstore| ... end pstore の時だけなんか引数で代入?みたいな特別な記法があるんだなーとずっと思ってた
特別な記法はある
>>547 特定のクラスだけ通用する記法みたいなのは特にないよ
返り値が評価されるだけだ
いや、トップレベルに read_only= という関数的メソッドを定義するライブラリかもしれないじゃないか
KDE3 の korundum.rb にはあった、KDE モジュールの ListView クラスと ListViewItem クラスが、 KDE4 の korundum4.rb にはありません。 これは何か別のクラスで置き換わったのでしょうか。 よろしくお願いします。
ちょっとした質問があります。 UTF-8(BOM付き)とUTF-8n(BOMなし)を判別する簡単な方法はありませんでしょうか? NKF.guess だと 両方とも 5(=UTF8) としか帰ってこず、 判別できませんでした。
対象をUTF-8のBOMと照合したらいいじゃまいか
BOMとマッチさせるだけだよなぁ。
特定のウィンドウやソフトから流れる音楽の音量を音楽編集ソフトで音量増幅したようにリアルタイムで増幅したいのですが。 ルビーでできますか。どのような方法で可能なのですか。
>>554 できるとしてもRubyとしての仕事ではなく、
他のプログラムのコア部分に処理を形通り依頼する(データを丸投げして呼び出す)というやり方になる
Rubyは関係ないな
>>550 一応答える
知らんがな
KDEスレのほうがたぶん変更理由とかに詳しいと思われ
>>554 OSやウィンドウ(アプリ)が何なのかによるんじゃないの?
↓LeopardでAppleScriptを介してiTunesのボリュームを変える
とか書かれても参考にならんでしょ?
require 'osx/cocoa'
include OSX
def iTunesVolume(volume)
script = NSAppleScript.alloc.initWithSource <<-EOF
tell application "iTunes"
set sound volume to #{volume}
end tell
EOF
error = OCObject.new
script.executeAndReturnError(error)
end
>>556 そうですか。すまんす。
KDEスレを探してみます。
.wavとか.mp3とかの元データを変えずに、 再生中に特定の曲だけボリュームを上げたいってことか。
Windowsなら腐るほど該当アプリケーションあるけどな
>>560 >>561 その方は私の質問に便乗している方ですのでお間違いないように。
私の希望はあくまでも、ウィンドウやソフトから流れる音をミュート以上にリアルタイムで増幅する方法です。
>>555 >>557 そうですか..。
いや、SDLとかいうルビーのゲーム用ライブラリーで音楽が扱えていたことと、
パソコン上で再生された音や特定のウィンドウの音を録音できるフリーウェアがたくさんあったので、そんなに難しいことではないのかなと質問させていただきました。
ミュートの調整による増幅以上に増幅する方法をさがしているので。
意味が分からない
>>562 他のフリーウェアがどうやってるのかは分からないが
Ruby覚え立てでスパッと出来るほど簡単なものではない
OSによってもやり方が違うし
ミュートの意味がおかしくね?
>>562 出来ないから諦めろ、て言われたら諦めてくれる?
567 :
デフォルトの名無しさん :2009/01/18(日) 21:30:31
>>564 OSはウィンドウズです。
>Ruby覚え立てでスパッと出来るほど簡単なものではない
そうですか?初心者向けと聞きましたが。
それに分からないから(これから勉強するので)初心者質問スレに質問したのですが。
>>566 分かる人を待ちますよw
このスレは成りすましお断りですよ
>>567 初心者向けだと言ったやつに聞けばいいのでは?
特定のアプリを外部制御するならまだしも
Windowsで再生してる音の波形から曲を判定し音量コントロールなんて俺はやりたくない。
タスクトレイにある「音量」をいじればいいよ。 それと同等の操作ならRuby初心者でもできるだろうけど それ以上を求めるなら間違いなく待ちぼうけになる。
571 :
デフォルトの名無しさん :2009/01/18(日) 21:54:19
>>569 >特定のアプリを外部制御するならまだしも
>Windowsで再生してる音の波形から曲を判定し音量コントロールなんて俺はやりたくない。
pcに流れる音全体でもいいですよ(できれば個別にですが)。
ただリアルタイムで音量を増幅できれば。
それとフリーの録音かソフトが個別の音を録音できていることから考えると、
pc上に流れた全ての音がミックスされてスピーカーで流れているだけで、
スピーカーから流れる前段階のどこかで、個別の音声はプログラムで取得する方法があるような気がします。
だから、できるって ただし、Rubyは無関係 他のサウンドとOSの深いとこを触るドライバやライブラリを直接いじるしかない そのいじり方を学んでから、Rubyで通信する方法を聞きに来な
>>567 >そうですか?初心者向けと聞きましたが。
Rubyは初心者向けかもしれんが
お前がやろうとしていることは、確実に上級者向けどころか前人未踏に近い領域だ
> それに分からないから(これから勉強するので)初心者質問スレに質問したのですが。
他の人も散々言ってるように、それは「Rubyの」初心者質問スレで解決できる質問じゃない
素直に諦めてくれ
>>567 できりょ。
・Rubyをインストールする
・Vistaをインストールする
・タスクトレイから音量ミキサを開く
・アプリケーションごとの音量を調整する
な?簡単だろ?
ちなみに、Win32のデバイスドラバとかWin32APIとか絡みそうなものはRubyと激しく相性が悪い。
そもそも、Win32をゴリゴリやるのは向かないだろ。
C#(.NET)とかC++の方がまだ向いてる。
>Win32のデバイスドラバとかWin32APIとか絡みそうなものはRubyと激しく相性が悪い。 mjsk kwsk
>・Rubyをインストールする >・Vistaをインストールする >・タスクトレイから音量ミキサを開く >・アプリケーションごとの音量を調整する これは上から順に見てワロタwww 上から順にしようとしたらできない事書いてあるし久々オモローwww
オモローって自分から使ってる人久しぶりに見た
579 :
デフォルトの名無しさん :2009/01/19(月) 09:39:59
rubyのRPMを探しているのですが、見つかりません どこにありますか?
>>579 最新のものにこだわらなければ、
大抵のLinuxディストリなら標準で入ってるんじゃね?
OSと、欲しいRubyのバージョンは何?
yum install ruby で入らないのか? 下手に探すより環境をしっかりさせろ。
yum じゃなければ apt-get
1.8.6に1.8.7のinjectでのシンボルによる二項演算子指定を実現するのは以下でいいと思います? class Symbol def to_proc proc { |obj, *args| obj.__send__(self, *args) } end end module Enumerable alias _inject inject def inject(*init, &block) if not block begin return _inject(&init[0]) rescue return _inject(init[0], &init[1]) end end _inject(*init, &block) end end
emacs(meadow)でRuby書くときにこれこそ入れておけっていうelispありますか? ruby-modeとruby-electric位しかruby周辺は入れてません.
ハッシュってキーもバリューも日本語いけるんだな!ちとおらびっくりしたぞ!
激しく実行環境依存で嵌まりそうだけどな。
可搬性がなければならないプログラムを作らなければならない必要性というのは 現代のRuby用途では意外と低い
自分んとこ(か、日本語が通ることが確定してる特定の環境)で使っておしまいというスクリプトのほうが多いな、確かに 外に出すんでなけりゃ日本語使ってもいいと思うけどね 日本語べったりになってるとアルファベットでどう書くか悩むことになるけど
形態素とか使ってたら日本語使った方が簡単そうだな
Ruby1.8.6です。REXMLのverは3.1.6です。
URLを与えたらそこから文書を抜き出してきて、それをyahooの形態素解析にかけるとXML形式でレスポンスが返るので
それをREXMLで解析するプログラムを作ったのですが、
wikipedia(全体ではなく開けるものもある)やその他一部のページで、REXMLの解析中にParseExceptionエラーが起きてしまうのですが、
エラー文を見ても意味がよく分からなく、同じような症状?が出た方も中々いないようなのでお手上げです。
以下エラー文です。
#<REXML::ParseException: Declarations can only occur in the doctype declaration.
Line:
Position:
Last 80 unconsumed characters:
<!doctype html public "-//W3C//DTD HTML 4.01//EN" "
http://www.w3.org/TR/html4/str >
明らかにXMLじゃないじゃん、それ Yahooからの返事がXMLじゃないエラーか何かなんだと思うよ
!DOCTYPE宣言が二重になってるとかなんだろうな
593 :
590 :2009/01/20(火) 01:51:53
>>591 エラーでしたら400等が表示されるはずなのですが、、
>>592 二重になるのってどこが問題なんですかね..
>>593 400等が表示って、ちゃんとHTTPレスポンスヘッダはチェックしてる?
しまった脊髄反射的なレスだった。 とりあえずREXMLに食わせるまえにファイル出力してみればいいよ。
エラーになるURL晒すのが早いと思うが
ネット系の問題に自分でデバックすら出来ないレベルか。なんか目的にたどり着くのは無理っぽい。 いつも使う必須のスクリプトが環境依存で引っ越して問題が出るのは良くある事。 まあその時に必要に迫られて書き直すと見通しよく成っていいプログラムに成る事は多いが。車輪の再生産気味だが。
リファクタリングが車輪の再生産って言われるとやる気なくします><
>>593 ステータスコードが200だからといって信頼していいわけじゃないぞ
ruby 1.8.6 WindowsXP SP3です。 実例ではないのですが、100までの数をカウントするプログラムに、 標準入力から入力された数字を現在の数字に足す機能を加えたいと思っています。 色々調べたところ、スレッドというものを使えばよいのかな、という結論に達したので 以下のようなプログラムを書いてみましたが、思うような動作をしてくれません。 どなたかお知恵を貸していただけないでしょうか? j = 1 t = Thread.new do while (j < 100) sleep 1 p j.to_s j += 1 end end while (j < 100) i = gets.chomp j += i.to_i end
これは・・・
自然数k,p,q,m,nについて k=mp+nq(m>=0,n>=0)を満たす(m,n)の組の数をv(k)とするとき p=3, q=7, kが1から100までのときの結果vの一覧を出力したいです Rubyではどのように書いたらいいですか?
>>602 m=0あるいはn=0のとき自然数じゃなくなるけどいいの?
>>604 すみません間違えました
x 自然数k,p,q,m,nについて
o 自然数k,p,qについて
あと、m,nは「0以上の整数」です
よろしくおながいします
>>603 うちでは数の表示がgets.chompに邪魔されて、リターンを押すまで
数え上げるほうのスレッドの実行がとまっているみたいなんです。
環境はLinuxとかでしょうか?
>>602 p = 3
q = 7
(1..100).each do |k|
v = 0
(0..(k/p)).each do |m|
(0..((k-m*p)/q)).each do |n|
if k == m*p + n*q
v += 1
end
end
end
print "v(#{k})=#{v}\n"
end
>>607 ありがとうございます。
実際にこの処理を使用するプログラムでは拡張ライブラリ使用&exerbでexe化を
考えています。Cygwinでは正常にexe化できないようなのでmswin32でなんとかならないか
もうちょっと調べてみます。
>>600 mswin32ではgetsがブロックする。
>>608 こうかな
p = 3
q = 7
t = 0
u = 0
(1..100).each do |k|
v = 0
(0..(k/p)).each do |m|
if (k-m*p)%q == 0
v += 1
end
end
print "v(#{k})=#{v}\n"
u += v
if v > 0
t += 1
end
end
print "total #{t}, #{u}\n"
>>609 exerb+cygwinでexe化うまくいってるよ
なんか変なライブラリくっつけてない?
614 :
デフォルトの名無しさん :2009/01/20(火) 09:59:05
>>614 ドンピシャです。ありがとうございます!
>>610-611 なるほど、mswin32だと修正を待つしかない・・・のかな?
と思ったけど回避策ってあるもんなんですね。引き出しを増やさなきゃ。
>>613 win32/sapi5を使っているのと、HDD容量に難があったのでCygwinは入れてませんでした。
2日前にHDDを注文したので届いたらCygwinでもやってみます。
レス下さった方々、ありがとうございました。
>>616 >なるほど、mswin32だと修正を待つしかない・・・のかな?
バグじゃないから修正はされないんじゃないかな。
1.9では問題ないみたいだけど。
>>616 _kbhit入れたバージョンでも
一文字だけ入れてenterしないときって止まるよね
>>617 バグじゃないんですかね?ruby-list 36068ではバグみたいに言われてる気がするけども。
1.9では問題ないとは!バージョンあげようかなぁ。
>>619 止まりますね。でも、そのほうが便利な気がしないでもないです、私の場合。
>>614 の方法だとキー入力するまでひたすらビジーループなんだが
>>620 Windowsでselectがコンソールに対して効かないのは仕様だろう。
バグだと思うならMSに言ってみるのがいいんじゃないか。
624 :
デフォルトの名無しさん :2009/01/20(火) 22:05:16
h = {"direct"=>"5", :list=> {"6"=>"南西","7"=>"西","8"=>"北西","1"=>"北","2"=>"北東","3"=>"東","4"=>"南東","5"=>"南"}} 上のハッシュをh.ya2yaml すると direct: "5" ? !ruby/symbol list : ? "1" : 北 ? "2" : 北東 ? "3" : 東 ? "4" : 南東 ? "5" : 南 ? "6" : 南西 ? "7" : 西 ? "8" : 北西 となるのですが、’?’はどういう意味ですか。 そもそも "8":北西 という感じで出力されると思っていたのですが, 期待と違った結果でした。 ruby 1.8.6 (2008-03-03 patchlevel 114)
1.9っていつリリースされる予定なの?
RC2出てから
628 :
デフォルトの名無しさん :2009/01/21(水) 02:08:46
Japanese O.K.
RC2出たな
a=[1,1,1,2,2,3,4,5,5,5]の配列を b=a|aにしたら[1,2,3,4,5]となりますが、 1->3個,2->2個,3->1個,4->1個,5->3個のように どの要素が何個かぶっていたかというのはどのようにしたらいいでしょうか?
とりあえずは普通に数えればいい overlap = Array.new b.each do |bb| count = 0 a.each do |aa| count = count + 1 if aa == bb end overlap << [bb, count] end overlap.each do |i, n| puts "#{i} の重複は #{n} 個です" end めんどくさい人向け overlap = b.map{|e| [e, a.grep(e).size] }
h=Hash.new h.default=0 a.each do |i| h[i]+=1 end 俺も初心者に毛が生えた程度なので、より良いのがあれば指摘求む
def uniq_c(org) counts = {} org.uniq.each{|e| counts[e] = org.count(e) } counts end とか。#countがどっから入ったか怪しいけど。 こーいう要望は割と定番なのでRuby "uniq -c"とかでググるとよろし
確認したらArray#countはRUBY_VERSION >= '1.8.7'だった。代わり org.count(e) -> org.select{|x| e == x }.size
最初のが一番マシだな それ以降のはただのオナニー もしかしたら演算記号メソッドで何かどうにかすればなんかどうにかなると思ったかもしれないけど、 残念ながらそういうのは無い 2つの配列の関係を解析して返すメソッドというのはあっても面白そうだとは思うが、きっとおおむね無駄だ
>>631-634 ありがとございました
書き込んだ後,配列について調べてたらuniqっていうのがあるんですね.
>>635 そうです.なにかメソッドがあるのかなと思ったのですが.
数え上げしていけばいいくらいなんで無駄になりますよね.
どこがオナニーなんだよ。数え上げる時は普通にHashを使うだろ
つーか
>>631 の最初のコードはズボラ過ぎる
a.inject(Hash.new{0}){|h,v| h[v] += 1 ; h }
普通に考えれば
>>632 だよな
少なくとも「最初のが一番マシ」はねーよw
ハッシュは順番が保存されないのがなー
この場合はたぶん順番必要ないよね
正規表現を使って一致を見てるんだけど 正規表現のパターンの中に「図」っていう漢字をいれると warning: regexp has `}' without escape ってwarningでるんだけど何とかならないですか?
その漢字の文字エンコード(普通、そのスクリプトのファイルの文字エンコード)を正規表現に指定しろ っていうか、そのへんは解説なりなんなりでフォローがあったと思うんだが
646 :
643 :2009/01/21(水) 12:30:03
>>644-645 返事ありがとうございます。
/図/
ってやってるのでエンコードの指定は特に何にもやってないです
Regexpクラスかなんかをつかってそのインスタンスにエンコードを指定するってことですか?
ファイルはShift-Jisでやってます
require 'jcode' $KCODE = 'SJIS' でとりあえずいいんじゃないの
648 :
643 :2009/01/21(水) 13:06:04
>>647 うまく行きました
ありがとうございます
jcode厨がまだいたとは jcodeは正規表現には全く関与しない
いちいち起動するたびに -K オプション付けなくちゃいけないの?
1行目 #!ruby -Ks
654 :
デフォルトの名無しさん :2009/01/21(水) 18:46:15
データが文字列の内容に数字をふったものを対象にして 数字でソートする場合どんな感じでやればいいでしょうか。 文字数字のままやると小さい数字が後にきたりして、ソートがおかしくなるのですが。
全部同じ桁にする
sort メソッドの説明は気の利かない書き方をしてるからね あれはブロックの結果がどうなるかでソートされるんだ irb> puts ['30歳', '2歳', '10歳'].sort 10歳 2歳 30歳 irb> ['30歳', '2歳', '10歳'].each{|a| puts a.scan(/\d+/)[0].to_i} 30歳 2歳 10歳 irb> puts ['30歳', '2歳', '10歳'].sort_by{|a| a.scan(/\d+/)[0].to_i} 2歳 10歳 30歳
>>654 数字を振るというのが文字列と別枠なら
hash = {3=>"c",2=>"b",1=>"a"}
hash.sort.map{|v| v.last}
irb> ['30歳', '2歳', '10歳'].each{|a| puts a.scan(/\d+/)[0].to_i} 30歳 2歳 10歳
>>658 あ、すまんね
そこのへんだけ直前に書き換えたんだ
案の定間違ってるな
irb> ['30歳', '2歳', '10歳'].each{|a| p a.scan(/\d+/)[0].to_i}
30
2
10
ってことで、ブロック内で数字部分を抜き出して整数にしてるんだということがわかってもらえればよかった
それぞれの要素に対して「数字部分を抜き出して整数にしたもの」で比較してソートすれば、おそらくうまくいく
>>600 とりあえずC#(.NET3.5)では
int j = 1;
Thread t = new Thread(new ThreadStart(() => {
while (j < 100) {
Thread.Sleep(1000);
Console.WriteLine(j);
j += 1;
}
}));
t.Start();
while (j < 100) {
String i = Console.ReadLine();
j += Convert.ToInt32(i);
}
これが動いたから、IronRubyなら動くかもよw
>>659 そこまで書いたなら最後まで書けばいいのに。
['30歳', '2歳', '10歳'].sort_by {|a| a.scan(/¥d+/)[0].to_i }
または
['30歳', '2歳', '10歳'].sort_by {|a| a =~ /¥d+/; $&.to_i }
['30歳', '2歳', '10歳'].sort_by {|a| a[/\d+/].to_i }
いや短くすることに意味はないから そんなこと言ったら %w.30歳 2歳 10歳..sort_by{|l|l.to_i} が標準で最短だぞ
たぶん単位とかだと思うけど、そういうのデータの中に含めるのってどうなんだろう 「1.5メートル」より「90センチ」の方が大きくなったりするんだろ? さすがに「2メートル」と「5キロ」とかは混在していないと思うが
生のデータを生のまま極力取り込んでおきたいという需要はそこそこあると思うよ 数値だけとかに正規化しとけというのはいやもう全くその通りではあるんだが
>>665 そういうのはラッパクラス作って都合の良い方でアクセスできるようにしとく
データがアクセスされるのは一つの言語からだけとは限らないぞ 3つ言語使ってたら全部の言語でラッパークラスを実装するのか?
それはまんどくさい(´・ω・`)
>>668 1つの言語からだけのことのほうが圧倒的に多いと思うがどうかね
君は移植性の高いC言語を使うべきだと思うよ
>君は移植性の高いC言語を使うべきだと思うよ うむ
データきたないと前の担当者に殺意を抱いたりするよなw
>>667 全くだ
汎用DBソフトに格納される業務データしか扱ったことがないのだろう
ほんとにどうでもいい話なんだけど
>>673 そういう人って稀にいるよね
業務でしかプログラミングに関わってない人
それはそれで仕事として効率もいいし好ましいことも多いが、話が全然合わんので困る
仕事でやっててプログラミングを好きな人はまだ良いが 好きでもなく仕事だからってやってる奴のソースはだいたい汚い。 そういう時は殺意抱くなwww
>>675 たしかに
a1=1
a2=2
a3=3
...
と延々と書かれていたことがある
配列+ループにするとか考えろと思ったが
行数で単価計算されるなら上の方が正解なのかも知れない
配列として保持するコストを嫌ったのかもしれない
世の中には虚しいこともあるんだね
>>678 がたぶん正解だと思う
行数稼ぎか配列利用法が理解できなかった(または利用禁止)な可能性も充分あるが
つか、言語と実行環境に強く依存するな 配列にしてしまうと保持と参照コストが妙に高くなる言語というのはなんかどっかにあったはず
array=[a,b2c,d2e,f,g]を[a,[b,c],[d,e],f,g]に分解するにはどうすればいいですか?
>>682 標準的な方法はないから、まあ好きにやれ
要素ごとに正規表現で分割して自力で配列を作るしかないな
>>682 split("2")とpushでOKじゃね?
[a,b2c,d2e,f,g] は ['a','b2c','d2e','f','g'] という意味なのか?
>>685 この文脈ではそう考えるのが自然じゃね
配列の要素が参照している変数名の英字部分を
ネストした配列の要素の参照の変数名に反映したいという込み入った希望かもしれんが
こうですか?わかりません >> ['a','b2c','d2e','f','g'].map{ |e| /2/ =~ e ? e.split(/2/) : e } => ["a", ["b", "c"], ["d", "e"], "f", "g"]
EOFにマッチする正規表現、または"末尾"がEOFであることを手短にチェックする方法ないですかね キー1: 値1 キー2: 値2[EOF]
689 :
227 :2009/01/23(金) 07:22:40
昔のことになりますが、カテゴリ取得に関して質問したものです。 ログを見ていたら同じようなことが質問されていたのでまた、質問をさせていただきます。 search('a').select{|a| /cat_/ =~ a['href']}.map{|a| a.inner_text} カテゴリが一つだけ指定されている場合は上のものでうまく言っていたのですが、 一つの記事で二つ以上指定されている場合にうまくいきません。 理想としてはcategory=["A",["A","B"],"A","B",["A","B","C"]] のようにしたいのですが
rubyってhtmlspecialcharsあるの?
>>689 もっと具体的なhtmlの例を出してくれないと答えられないような…
>>689 selectってなんだっけ、findだっけfind_allだっけ
…allのほうか
カテゴリってのは一番下にあるやつだな、他のブログではタグとか言われてるものだ
>>246 では例が悪いので、適当な大手のアルファルアモザイク例に出すぞ
ttp://alfalfa.livedoor.biz/archives/cat_50026947.html これから
[
["ネット・PC・技術", "短レス"],
["ネット・PC・技術", "短レス"],
["ネット・PC・技術", "知識・薀蓄"],
…
]
という配列を抽出したいという要望でいいか?
「記事単位でsearchかけてから、それの返り値のHpricot::Elemなどに対してmapを使う」が答
なにをどうやって記事単位とみなすかはそのサイトのHTML構造読め
>>691 >>692 さんが例に上げたサイトのようなものです。
>>692 さんが書かれたような配列です。記事単位はデザインの雛形によって変わってくるので調査済みです。
今移動中なんで確認できませんが,
記事単位.search('a').select{|a| /cat_/ =~a['href']}.map{|a|a.inner_text}みたいなものですか?
require 'rubygems'
require 'hpricot'
require 'open-uri'
require 'kconv'
doc = Hpricot.parse(URI.parse('
http://blog.livedoor.jp/dqnplus/ ').read)
result = doc.search('div.hentry').map{|div|
[div.at('h3.title%20entry-title').inner_text,
div.search('a').find_all{|e| /archives\/cat_/ =~ e['href']}.map{|e| e.inner_text}]
}
result.each do |post|
puts "#{post[0]}[#{post[1..-1].join(', ')}]".toutf8 # 画面表示のエンコードに合わせること
end
けっか:
FF11、バグを利用してアイテムを複製した500人の廃人を強制退会処分に
[びっくりニュース, ゲーム]
次期ロシア正教会総主教のネット人気投票、日本人大主教がダントツ1位に…「日本アニメのファンが原因」とロシアマスコミ
[びっくりニュース, 国際]
「孫悟空」の起源は韓国のサルだった…韓国教授が主張
[痛いニュース, 韓国・北朝鮮]
パッケージに萌えキャラが描かれた「ツンデレカレー」「萌カレー」他が馬鹿売れ
[おバカなニュース, 食生活]
「若者、結婚が遅い…どんな恋愛してるのか」「日本はなぜ子供産むのが難しいのか」など、小渕大臣が少子化分析チーム
[痛いニュース, 政治・経済]
…
タグのネスト云々はこういうことをやりたいのだと推測
タグが1個しかない場合も要素1の配列になるので注意
>>695 ありがとうございます。すぐに確認できませんが,帰宅したら確認します!
スクリプト作るの早いな
>>697 過去に似たようなの作った経験があれば見当つくから
あとはサイトの特徴調べるだけでこんなもんよ
早い人はもっと早いはず
というか、このスクリプトは見たままの処理しかしてないので泣きたくなるほど遅い
なんかスゴい人がXPathとか駆使して爆速に仕上げてくれることを期待
>>699 def CGI::escapeHTML(string)
string.gsub(/&/n, '&').gsub(/\"/n, '"').gsub(/>/n, '>').gsub(/</n, '<')
end
ということで CGI::escapeHTML
require 'cgi' して使ってね
シングルクオートをエスケープすることはありません
今なら cgialt/util を薦めた方が良いのでは
標準でなくていいのならたくさんあるよそりゃ 4つgsubするだけだから自前でやれというのもありだろうし cgiライブラリがCGI作成に最早使われてないのは公然の暗黙
最近は文字列エスケープユーティリティと化してるな
ここでスモーカー抜けるのは痛いな
705 :
704 :2009/01/23(金) 09:43:02
ごめんなさい
揃ってるも何も(PHPの)htmlspecialcharsの動作をするのは CGI.escapeHTML だけだぞ
>>707 全然知らんようだからほかにもいろいろあるって紹介したのだが
URLエンコードするのありますか?とか追加質問されたらバカバカしいだろ
リロードしてなかったから
>>700 は気づかなかった
Rails1.2.6を使って作成しているのですが、selectを動的に変化させようとすると ActionView::TemplateError (undefined method `number_select' for #<HashWithIndifferentAccess:0xb722adf0> というのが出てしまいます。回避策があればご教授ください。 <やっていること> index.rhtmlの中を次のようにしています。 <div id="all"> <table> <tr><td id="first"><%= render :partial => 'first_info' %></td id="first"></tr> <tr><td id="second"><%= render :partial => 'second_info' %></td id="second"></tr> <tr><td id="third"><%= render :partial => 'third_info' %></td id="third"></tr> </table> </div id="all"> _first_info.rhtmlには次のような selectがあります。 <%= select(:first_info, :number_select, @numbers, {:selected => @select_value}, {:onchange => remote_function(:submit => :first_info, :url => { :action => :change_select }}) %> @numbersはコントローラー側で @numbers = ActiveSupport::OrderedHash.new してデータベースから値を格納しています。 _second_info.rhtml のテキストボックスに値を入力し、ボタンを押したら、その値をDBに登録し、_first_info.rhtmlの selectのリストに入力値を追加しようと以下のように処理しています。 1.コントローラーの_second_info.rhtmlから次の関数が呼ばれる def second データベースへ登録 @numbers = ActiveSupport::OrderedHash.new @numbers へデータベースの値を格納 @select_value = 1 end 2. second.rjsは _first_info.rhtmlを更新するため、次のようになっている page[:first_info].replace_html :partial => 'first_info'
instance_variable_set の 変数名に指定する文字列って、ユーザの入力そのまま渡しても大丈夫?
>>712 そのクラスでありえそうな変数名用文字の集合(おおむね英数字とアンダースコア)にマッチしないものは
事前に弾いとくとかしておいたほうがいいと思う
あるいはアクセサの提供を条件にしておいて instance_methods に指定文字列があるかどうかチェックするとか
中のほうでevalしてるんじゃないかという疑問に答える知識はない
>>712 既存のインスタンス変数をどうされてもかまわないなら、大丈夫。
>>713 内部でevalとかはしてない。
>>710 >ActionView::TemplateError (undefined method `number_select' for #<HashWithIndifferentAccess:0xb722adf0>
エラーの意味は分かってる? HashWithIndifferentAccess のオブジェクトに対して number_select メソッドを呼び出して、それで undefined method になっている。
呼び出すメソッド名を間違っていないなら、呼び出す対象となるオブジェクトを確認してみてはどうだろうか。
もしそれであっているなら、Railsのバグかもね。
継承したクラスのオブジェクトの配列で困ってるんだけど class SuperClass def <=> other true end end class Class1 < SuperClass end class Class2 < SuberClass end arry = [] array << Class1.new array << Class2.new array.sort で、『Class1 と Class2 は比較できねぇよゴラ!』 といわれてしまうんだけど。 どうにかなんないかな? C++の SuperClassVecter* array = new SuperClassVecter() Class1* c1 = new Class1() array.push((SuperClass*)c1); Class2* c2 = new Class2() array.push((SuperClass*)c2); みたいなことがやりたいんだけど、よくわからんちん。
>>716 Comparableメソッドをインクルードしましょ
というか、基本的にはクラスが違うと比較はできないよ でもそれだと困るので (10 < 11.1 だとエラーで、いちいち明示的に 10.to_f < 11.1 しなければならないとか超困る) Rubyではcoerceのようなメソッドを作って汎用的なデータ構造に変換を依頼するというのが普通らしい でもめんどいので、スーパークラスで自分のデータの大きさを規定するというのはどうだろう class SuperClass def initialize(data); @data=data; end def <=>(other); self.length - other.length; end def length; @data.length; end end class Class1 < SuperClass; end class Class2 < SuperClass; end arr = [Class2.new('second'), Class1.new('first')] p arr.sort 結果 [#<Class1:0xb7c415f0 @data="first">, #<Class2:0xb7c41618 @data="second">]
>>719 標準の配列に入ってる状態で標準の sort をすると Class1 のオブジェクトが Class2 より前に出るとか
そういうほのかに邪悪の香りがする処理をしたいのでは
class SuperClass
def <=>(other); self.class::PN - other.class::PN; end
end
class Class1 < SuperClass; PN=1; end
class Class2 < SuperClass; PN=2; end
class Class3 < SuperClass; PN=3; end
arr = [Class3.new, Class2.new, Class1.new]
p arr.sort
[#<Class1:0xb7d0ce94>, #<Class2:0xb7d0cea8>, #<Class3:0xb7d0cebc>]
rubyのスレって親切に教えてくれるよね。 PHPは気持ち悪い連中ばっかりで寒気がする
どの言語も人気が出て使う人が増えてコモディティに接近するとああなるよ このへんの待遇は単にユーザーの数の少なさの裏返しというだけに過ぎない
ドキュメントが完備されていないから、まだまだまともな質問が来るので、 答える方もまだブチ切れてなわけだ。
でもオンラインリファレンスに乗ってることでもみんな寛容に答えてるよね。 新規参入促進にはいいのかな? 俺はまだ初心者だけどrubyは書いてて楽しいね
725 :
716 :2009/01/23(金) 22:55:11
みんなありがとう。 継承クラスのどっからでも比較できるようになったよ! あと、ドキュメントって読みにくいよね。 せめて単語で引けるインデックスがあれば・・・ 月曜にRuby始めたばっかりなんだけど ドキュメント調べてる時間が9割以上ってどういうことなのさ! しかも知りたいことにはほとんどたどり着けない。
ソース嫁ってことなのか。
プログラミングなんて8割くらいは調べものだと思うよ 始めたばかりならなおさら でまあそれとは別にRubyのドキュメントは機能的に非常に貧弱だ どうにかしないといけないという話は出るが、本当にマシになったことはまだ一度もない
>>727 > プログラミングなんて8割くらいは調べものだと思うよ
> 始めたばかりならなおさら
おまいは時代に追い付け
>>728 打鍵時間以外はほとんど全部調べ物だと思うんだが
仕様書読んだりマニュアル読んだりRFC読んだりネットの事例読んだり
>>725 >ドキュメント調べてる時間が9割以上ってどういうことなのさ!
初心者はまず入門書から始めることをオススメする
Webのドキュメントだけで済まそうとするのは、他の言語に精通している人だけにしとけ
半分はテストじゃないのか?
そんな時間かかるか? っていうか、テストやらデバッグってプログラミング作成時間とは別にとって考えるもんなんじゃね?
Rubyのドキュメントががっかり品質なのはどう言い訳しても事実
どこに言い訳が?
思春期後期の症例の一つです<言い訳してる人を見出したい
じゃあ
>>733 は見えない人を相手してるだけか、失礼
>>732 「テスト駆動開発(TDD)」「振る舞い駆動開発(BDD)」「継続的インテグレーション」あたりでぐぐれ。
>>725 ドキュメントはchm版を見るのがおすすめ
ちゃんとキーワードでインデックスされてるのでメソッドを調べたりするのが早い
慣れないうちはchm版リファレンスマジおすすめ
つーかRubyリファレンスががっかり品質だって言われるけど
他の言語のドキュメントってそんなに充実してたっけか?
>>739 テストコード→アプリコード→テストコード→アプリコード→… の手順で進めるなら
両方ともプログラミング時間に含めるべきだろう
Ruby ドキュメントといえば Dave Thomas と Andy Hunt の Programming Ruby の Web 版が 見れたときは感動した。 日本語訳が出たときは、お布施のつもりで買った。
>>721 最近、php使い始めたんでphpの質問スレもいってるんだけど、
何故かみんな少しカリカリしているイメージw
ただ、やぱphpはリファレンスマニュアルがしっかりしている(特に公式がすばらしい)
のがいいわ。
マニュアルにコメントがつけられるらしくて(細かいところは知らん)
FAQが補足されてることも多々ある
>>740 chm使ってるけど、がっかり品質ということはないな・・・
サンプルコード的なのをものとか、メソッドに関するFAQとかをもっと載せて欲しいと思うことはあるが
Rubyに慣れるまでは使いにくかったけど、慣れてからはそこそこ使えると思った。
まあ、リファレンスだしね
見て、使い方を理解するのに時間がかかる感じだな。 書いてるほうは、こんなの一目見りゃ分かるだろ的ノリなんだろうけど、見てるほうはそうでもないギャップがある。 お腹いっぱいに成るほどにサンプル手繰れてもいいと思うけどね。 でもオブジェクト指向自体が、ある日突然閃くまでは意味不明の苦痛の日々だしなあ。 そういう意味で教典読んでも、修行の後、悟り開けないと付いて行けない感じ。 phpのほうは、思想的な物は無くてどうとでも使える節操無い所があるからな。結果的に出来りゃなんでもいいじゃんみたいな。 便利そうな機能も無節操に突っ込みまくってるし、実際便利ではある。rubyだと便利そうなライブラリを探して読み込む所から始まるし。
>でもオブジェクト指向自体が、ある日突然閃くまでは意味不明の苦痛の日々だしなあ。 はぁ?
>>744 閃く遥か前の段階で「自分は既に悟っている」と勘違いしてる馬鹿には
縁のない次元の話だから、無理に関わろうとしなくていいです。
うわぁ・・・
もうやめようぜ!おまいらの好きなアイドルはだれだ? 俺は長島海輝だぜ!
>>748 特にないと思う
たぶん、世界中で何十回も生産されてるコードだ
どっかであってもいいのにね
>>746 俺もネットやりたての中二病真っ盛りの頃、
グウの音も出ないけどそれでも何か「相手に痛いところがある」風に装いたいとき、
よくそういうの書き込んだなー。
calコマンドのようにカレンダーを表示したいのですが、定石みたいなのってありますか?
宿題スレに書き込んだのが残ってた calコマンドのように表示するように作ったのは確かなんだが、 ぶっちゃけ表示部で何やってんだかわからん #!/usr/bin/ruby require 'date' ### Usage: ./cal.rb [YYYY MM] ### ./cal.rb 2007 3 #=> Mar 2007 calender ### ./cal.rb 3 2007 #=> Mar 2007 calender ### ./cal.rb #=> this month's calender if ARGV.empty? then t = Date.today else argv = ARGV[0,2].map{|s| s.to_i} t = Date.new(argv.max{|a,b| a <=> b}, argv.min{|a,b| a <=> b}, 1) end (d_one, d_last) = Date.new(t.year, t.month, 1), Date.new(t.year, t.month, -1) cal = "#{Date::MONTHNAMES[d_one.month]} #{d_one.year}".center(3*7) << "\n" cal << Date::ABBR_DAYNAMES.inject(''){|days,name| days << name.chop.rjust(2) << ' '} << "\n" (d_one-d_one.wday).upto(d_last+6-d_last.wday) do |d| (cal << ' ';next) unless d.month == d_one.month cal << d.day.to_s.rjust(2) << ' ' << "\n"*(d.wday / 6) end puts cal
>>749 自分で作ってみて、宿題スレにでも行きます
>>752 ありがとうございます。
読んでみますね。
>>754 要は、 String#rjust ってのがあるんだよ
これは指定数で右詰めする
"A".rjust(2) は "+A" を返すし(+は本来は空白)
"AB".rjust(2) は "AB" を返す
この2バイト確定の文字を空白で挟んで7つ表示して1週間を作ってる
joinでいいじゃんね、これ
>>748-749 文字を音声で読んでくれるソフトは結構出回ってる
Ruby 的には不評な Windows 系なら
Microsoft Windows Speech っつーソフトが無料だから試してみれ
日本語・ドイツ語あたりまでならなんとかなるんだが
フランス語だと死にそうだな
…?
松本教信者のみなさん今日は。
>>757-758 Rubyの練習として、NabeAtzz問題を解いてみたかっただけなんすよ
Rubyのrequireという命令が、使う頻度の高い割に すごくタイプしづらい文字なので困っています。 COBOLに慣れているので、copyというキーワードで 代替できるようにRubyを改造する方法があれば教えてください。
copyという文字列をrequireに置換するスクリプトをかけばいいやん
alias copy require ただし、他の人がいじるスクリプトではお奨めしない タイプしづらくてもrequireに慣れるべき
ワロタ
require は COPY ではないので、それやりたいなら COBOL やれとしか
>>762 copyって入力したらrequireと変換されるように辞書に登録してしまえば
def copy arg require arg end
if then →if { end → } に置換するC言語のマクロ思い出したww さすが、COBOLerは発想が一味違う
天下の元祖B shellだってそういう風に書かれていたんだけどな
B shell は if 〜 then; ...; fi だ
776 :
デフォルトの名無しさん :2009/01/25(日) 12:15:51
ふぃ〜
777 :
762 :2009/01/25(日) 12:22:01
アドバイスありがとうございます。 いろいろ検討したのですが、 あらかじめ先頭行にreqireと打ち込んだ ひな形テキストファイルを用意しておき、 ソースを書き始める時はそれを読み込む ことにしました。
ほんとにrequireって打つのが苦手なんだな・・・。
q以外は、人指し指と中指を単純に動かすだけなんだけど、 まぁ、指の仕様も人それぞれってことなんだろうな。
780 :
デフォルトの名無しさん :2009/01/25(日) 12:34:00
require
requireとloadを逆にしておけばよかったのになあ
784 :
デフォルトの名無しさん :2009/01/25(日) 13:14:08
余裕だろ。 require
require なんてキーの配置と流れは簡単じゃん req→右から左。キーは隣+一つ飛ばし ui→左から右。キーは隣 re→右から左。キーは隣 3回にわけてリズムをつかめばすぐに慣れると思う って全然Rubyの話じゃないな
QWERTY
英単語的に、qのあとはuが来ることが多いので、その部分はほとんど間違えなく指が勝手に動くな
test require
ていうか、スクリプトの一番最初にまとめて、 またはライブラリ追加の必要性があるときにファイル先頭に移動して改めて書くようなもんだから、 その時だけゆっくり(手元見ながら)打ち込めばいいじゃんね キーボード全体から強い光が発せられていて注視できないような構造になってるとかそういうのですか?
791 :
デフォルトの名無しさん :2009/01/25(日) 13:37:17
私の好きなフィギュアスケートの澤田亜紀ちゃんの名前は打ちにくい
792 :
デフォルトの名無しさん :2009/01/25(日) 13:43:48
| │ 〈 ! | |/ノ二__‐──ァ ヽニニ二二二ヾ } ,'⌒ヽ /⌒!| =彳o。ト ̄ヽ '´ !o_シ`ヾ | i/ ヽ ! Require ... ! ハ!| ー─ ' i ! `' '' " ||ヽ l |
793 :
772 :2009/01/25(日) 14:19:58
>>773 それそれw そのことだよまさに
>>777 俺ならエディタのスニッペにrequire登録しておいて、
r(スニペット補完キー)
でrequrieを補完するな
794 :
772 :2009/01/25(日) 14:20:39
スニッペってなんだww 「スニペット」な「コードテンプレート」とかエディタや開発環境で呼び名は違うと主ウケ緒d
落ち着け。
require よりも、elsif の方が、打ちにくい。 エディタの設定で、*.rb ファイルで、elseif と書いたら、 elsif に置換しているけど。
ZAQ のうちにくいこと
ZAQは小指の爪を使ってキーボードの下から上へすべらすように z za zaa z za ・・・できねえ
そんなん右手薬指で右Shift押さえながら左薬指でzaw押せばいいじゃん ホームボジションなにそれ
>>799 押せてねぇw
ホームポジションなにそれは同意で、小指薬指中指で順にZAWと押せば
( ゚Д゚)・・・。
ところで
>>771 みたいなことするよりは
>>764 のほうがいいよね?
>>771 みたいにラップしたほうがいいときってある?
requireは上段に集中してむしろ打ちやすいような。 どうしても打てないなら、つ 最終兵器dvorak
req(単語補完(ry だろ、JK
803 :
デフォルトの名無しさん :2009/01/25(日) 19:13:48
word = ["apple", "orange", "lemon"] を検索のキーとして sentence = ["apple is red","orange is not blue","lemon is yellow","apple is not orange","lemon is not red"] から何個、検索結果が出てきたか知りたいのですが、どうすればいいでしょうか?
>>805 配列要素をeachで枚挙することを厭ってはいけない
特にRubyではね
words = ["apple", "orange", "lemon"]
sentence = ["apple is red","orange is not blue","lemon is yellow","apple is not orange","lemon is not red"]
counts = {"apple"=>0, "orange"=>0, "lemon"=>0}
sentence.each do |s|
words.each do |word|
if /#{word}/ =~ s then
counts[word] = counts[word]+1
end
end
end
p counts
結果:
{"orange"=>2, "apple"=>2, "lemon"=>2}
counts = {} words.each do |word| counts[word] = 0 end
unko
久しぶりにスレみたら
>>747 で吹いた。
男じゃん。と思って検索したら、こんなに可愛い子が女の子なわけないじゃないか
ググってしまったじゃないかww
調べたらショタアイドル。ぐぐr必要なし
密林で注文したじゃないかw
815 :
デフォルトの名無しさん :2009/01/26(月) 03:25:48
puts "文字" puts "文字" puts "\n" srand require 'readline' def try_answer(prompt) while buf = Readline.readline(prompt, true) yield buf end end difficulty = ($*[0] || 1).to_i difficulty >= 1 or raise "#{difficulty}: Invalid difficulty direction" answer = rand(30 * difficulty + 1) judge_table = ["文字1","文字2","文字3"] try_answer("文字 > ") do |line| try = line.to_i result = try <=> answer puts "#{try}#{judge_table[result]}" break if result.zero? end プログラミングに興味が出て、いろいろさがしてたら 学校の過去の資料にこんなプログラムがありました。 これはどんなプログラムなんでしょうか? 一文一文の意味を教えていただけないでしょうか?よろしく おねがいします。
マルチは感心しないな
817 :
デフォルトの名無しさん :2009/01/26(月) 03:32:21
ruby経由でwgetしつつ出力を表示しつつ、log.txtにもはきつつってことをやりたいのですが、上手くいきません。
画面には表示されますが、log.txtには何も書き込まれないという・・・
これは何がおかしいものなんでしょう
Dir::chdir("/work") do
system("wget
http://example.com/ | tee log.txt")
puts "read log.txt"
puts File.read("log.txt")
end
>>817 wget の出力は標準エラー出力に表示する
tee は標準出力を取り込むことしかできないから、そもそも log.txt にはなにも書き込まれない
wget
http://localhost/ 2>&1 | tee log.txt
Ruby あんま関係ないな
>>818 いけた!そっかwgetエラー出力だったのか・・・
基本的なところをうたがうべきなのにすっかり忘れてた
これを意識してる人はまずいないよ これはむしろ wget の欠陥だと思う
821 :
デフォルトの名無しさん :2009/01/26(月) 05:47:44
Rubyでwebサーバーにアクセスしたとき そのサイトにどんなファイルがあるか調べる方法はありますか?
index許可してあればリスト取り出せるけど そうじゃなければ_
823 :
デフォルトの名無しさん :2009/01/26(月) 09:16:34
robotでも作るつもりなのかな
>>820 wget の場合、標準出力は -O - で取ってきたものを出力するためにあるので
(他のツールにパイプで直接流し込んだりとか)、そういう時にも一貫性を保てる
ように、メッセージは標準エラー出力というのは理にかなっている。
メッセージをファイルに取りたいなら -o filename オプションを使うという手もあるが。
Ruby 関係ないな。
>>822 Ruby関係ないよね
っていうか、HTMLやHTTPの勉強はしてもらってるのかね
Rubyは魔法じゃねえぞ
Ruby関係ないということがわかるだけでも勉強としては前進だから、どんどん聞くだけ聞いてもらってもいいけどな 回答としても「ちげーよRuby関係ねーよ」と答えるだけでいいから楽だし Ruby内でwget使ってログ管理しようとして嵌るというのは順調なテンプレの範囲だと思う
827 :
817 :2009/01/26(月) 12:24:18
そもそも、コマンドラインで
wget
http://example.com/ | tee log.txt
ってやってみてRubyの問題なのか、そうじゃないのか切り分けるべきでしたね
なにあれ、解決したので助かりました。
Ruby 1.8でDir.globに複数のパターン(というか拡張子)を指定する方法は ありませんでしょうか? (Dir.glob("**/*.css") + Dir.glob("**/*.html")).each do |file| : end のようにするしかない?
>>828 マニュアルに初心者お断りな感じできちんとわかりにくく書いてあんじゃんよ
irb> Dir.glob("*")
["002.txt", "001.txt", "aaa.jpg", "bbb.jpg"]
irb> Dir.glob("*.txt")
["002.txt", "001.txt"]
irb> Dir.glob("*.txt\0*.jpg")
["002.txt", "001.txt", "aaa.jpg", "bbb.jpg"]
あれわかりにくいよね 素直に第一引数は配列受け取るようにすればよかったのに
ネットワーク上にあるExcelファイルを、 open-uriを使わずにnet/httpを使ってFileオブジェクトに格納する方法はあるでしょうか
>>831 bodyをそのままwriteするだけじゃダメなんだっけ?
833 :
828 :2009/01/26(月) 15:52:40
>>829 本当だ!
> パターンを "\0" で区切って 1 度に複数のパターンを指定することもできます。
>
> p Dir.glob("f*\0b*")
> => ["foo", "bar"]
マニュアルみたつもりで見落としていました。
ありがとうございました。
>>832 bodyメソッドを実行すると「string contains null byte」とエラーが出てしまいます・・
めんどくへえ イントラ限定のサーバかなんかで変な形式で送られてきてると予想 ヘッダはなんて言ってる?
レスポンスのヘッダでしょうか? HTTP/1.1 200 OK Date: Mon, 26 Jan 2009 07:08:59 GMT Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) mod_ssl/2.8.12 OpenSSL/0.9.6b DAV/1.0.3 PHP/4.1.2 mod_perl/1.26 Last-Modified: Mon, 26 Jan 2009 00:11:23 GMT ETag: "3f1629-48000-497cffab" Accept-Ranges: bytes Content-Length: 294912 Content-Type: application/vnd.ms-excel こんな感じです
>>834 エラー箇所どこ?
win32なのにバイナリモードでFile.openしてないとかいうオチはない?
>>838-839 初心者スレだしこんなミスもいいんじゃね?w
解決したならなによりだし(あのエラーを見たことは無いから自信はなかった)
騒がせたと懲りてるようなら、もう同じミスをしてもすぐ自分で気づくだろうから。
>>833 glob 構文だけを純粋に使って、*.{css,html} これでもいんじゃない。
>>833 ・{ } コンマで区切られた文字列の組合せに展開します。
Dir.glob("**/*.{css,html}") do |file|
puts file
end
1.9だと配列で複数のパターンを渡せるようになった
あらら、かぶっちゃった Dir[pattern] 形式だと1.8でも複数のパターンを指定できるよ Dir["**/*.html","**/*.css"].each do |file| puts file end
844 :
828 :2009/01/26(月) 17:40:13
>>841-842 おお、便利だ!
> { } コンマで区切られた文字列の組合せに展開します。
> 例えば、 foo{a,b,c}はfooa, foob, foocに展開されそれぞれに対してマッチ判定を行います。
> 括弧は入れ子にすることができます。例えば、 {foo,bar{foo,bar}} は
> foo, barfoo, barbar のそれぞれにマッチします。
これですね。ありがとうございました。
>>843 完全に単なるエイリアスだと思い込んでた…
glob構文めんどいから
["**/*.html","**/*.css"].inject([]){|r, i| r.concat Dir.glob(i) }
こんなことしてたぜ…横から感謝
>>843 すげー。知らんかったわw globとは別なのね
>>843 はオレも知らんかったので助かるんだけど、でもこれっておかしいよね。
ほんとはglob()と同じにすべきだよな。わざわざこんなふうにしている意味が分からん。
> ほんとはglob()と同じにすべきだよな いまさらglobを変えるわけにいかないからせめて関数的メソッドDir[]は配列を受け取るようにしたという流れだと思った よく覚えてない
Dir[]とDir.globの違いはなんだろ(引数以外) Dir[]全部列挙で、Dir.globはブロック渡すと逐一処理可能ってことか?
glob2とか作ってコンパチ目指したほうが。 なんか先に作った香具師の実装がアレでみんな迷惑してるの多いよね。cgiとかwww Content-Transfer-Encoding: base64とか付いてるとか?
>なんか先に作った香具師の実装がアレでみんな迷惑してるの多いよね。cgiとかw あほか それは事実だが結果的にそうなった つまりそういう開発ポリシーだからそうなる必然 文句云うな
日本語でおk
まぁ文句あるならもっと良いもの自分で作れってことだろ そうやってMatzんは煽って北
「開発ポリシー」で互換性を残したままにするから、 結果的に古いのが残っているってことでしょ
Rubyのコアライブラリ近辺って「1つ目」を作る人は大量にいるけど「2つ目」を作る人がいないんだ 全部自前でクラスやメソッド改造してしまうから Ruby1.2くらいで「このライブラリの存在は大きいので、では本格的なものを添付しましょう」という流れにならないのがRuby
cgi2chとかいうライブラリができたら楽しいなw
>>844 シェルのワイルドカード展開と一緒だよ。コマンドラインで多用しない?
diff -c nagainamaenofairumeiwonandomoutitakunai.rb{.orig,}とか。
確か次世代cgi.rbは、候補はあるけど決定的なものがないという理由で今のままなんだよね
cgi.rbをとりあえずな感じで添付したらそのまま数年維持されて癌になったという経験が尾を引いてるな
互換性なんかどこに残ってんだよ
クラス CGI2ch::BBS クラスメソッド CGI2ch::BBS.new([index]) 最新の板一覧取得用URL(複数候補可)を指定 インスタンスメソッド menu() 板一覧を取得 戻値 (cat, host(FQDN), board, name) のリスト 例: [('', 'www.2ch.net', '', '2chの入り口'), ('', 'info.2ch.net', 'guide', '2ch総合案内'), ..., ('ニュース', 'mamono.2ch.net', 'newsplus', 'ニュース速報+'), ..., ('PC等', 'pc11.2ch.net', 'unix', 'UNIX'), ... ('PC等', 'pc11.2ch.net', 'tech', 'プログラム技術'), ...] board(name) CGI2ch::Boardのインスタンスを生成
クラス CGI2ch::Board クラスメソッド CGI2ch::Board.new(host, board) インスタンスメソッド subject() スレ一覧を取得 戻値 (key, title, res) のリスト(スレッドキー, タイトル, レス数) 例: [(1223709050, 'Rubyについて Part 33', 624), (1233033091, '愛国Ruby', 14), ...] thread(key) CGI2ch::Threadのインスタンスを生成
クラス CGI2ch::Thread クラスメソッド CGI2ch::Thread.new(key) CGI2ch::Thread.create(name, email, body) 新スレを立ててインスタンスを生成 インスタンスメソッド read(key) write(name, email, body)
クラスメソッド CGI2ch::Thread.new(board, key) CGI2ch::Thread.create(board, name, email, body) 新スレを立ててインスタンスを生成 boardが必要かな
>[(1223709050, 'Rubyについて Part 33', 624), > (1233033091, '愛国Ruby', 14), ...] なにこれ
867 :
710 :2009/01/27(火) 17:22:38
>>711 Railsのスレあったんですね。
気づきませんでした。
>>715 コメントありがとう。
結局原因がわからなかったので、rjsの中でhtml(<option></option>)を組み立てて、selectボックスに
対してreplace_htmlしたら回避できました。
869 :
デフォルトの名無しさん :2009/01/27(火) 17:42:31
2chの仕様なんて面倒だぞ。 専用ブラウザ開発者はマゾヒストとしか思えない。
リファレンスマニュアルの使いにくさをどうにかしてください。 例えば、タイムアウトさせたい処理について調べたい場合、目次を見てもどこを見ていいのかさっぱりわかりません。
あ、オフィシャルサイトは検索休止中なんだっけ timeoutで全文検索すると出てくるぞ
>>876 MLいわく、静的HTMLを吐くツールが整備されてから
879 :
デフォルトの名無しさん :2009/01/28(水) 00:01:28
>>864 そんなことしてる暇あるんなら
Rubyのリファレンスマニュアルを検索出来るようにしてくれさい
つ refe2
Rubyラブじゃ☆
require "active_support" すると、 あらゆるオブジェクトに daemonize というメソッドが付いてくるんですが、 これって ActiveSupport が意図してやってるんでしょうかね? こうするメリットが良くわからないんですけれども。
Kernel や Object クラスのようなものに外部モジュールがメソッドを追加するというのは議論を呼ぶ設計なのは確か ActiveSupport::Daemon.daemonize(obj) みたいなのでいいじゃんというのも指摘としては真っ当 そこで笑ってこっち見てる YAML 君もこっち来なさい
require "active_support"を使わなければ問題ない
String#each_line(sep) って、中で事前に巨大な配列作ってますか? 「ちょっとずつ」改行まで読み込んで返している動作ですか?
フラッグ型に保ち合ってきた。どっちかにブレイクするかもな。
誤爆・・・
>>886 String#each_lineだから「読み込んで」は不適当な気がするが、
改行を探しては1行作ってyieldし、という挙動ではある。
str.split(/sep/).each do |line| と str.scan(/\G#{sep}/){|line| なら、String#each_line は後者のイメージに近いと思われ 「str が 大きかったら each_line 1回のためだけにでっかい配列ができて胃が痛い」とか考える必要はないかと
やっぱ str.to_a.each_with_index do …はあんまりよくないのか each_line_with_index って each がえにゅめらぼーウンタラの関連でどっかのバージョンで登場してたりする?
>>891 行番号が知りたいんだろうけど、each_lineは行ごとにループ呼ばれるから
自分でカウントアップすればいいんじゃない?
str.each_with_indexじゃダメなん?
String から呼ぶ Enumerable のメソッドって String をどう扱うかイマイチわからん
>>892 > 自分でカウントアップすればいいんじゃない?
なにそのwith_indexの存在意義自体を土足で踏みにじる暴言
>>893 ,895
1.9のStringってeachがなくなってEnumerable非対応に
なるんじゃなかったっけ?
>>894 Enumerableのメソッドは全てeachに依存してるから、eachに準ずる。
直観的じゃないという話なら同意。
Rubyには放っておいても増える隠し定数のループカウンタとかないの
>放っておいても増える そんなもんあったら問題だw
1.8.7以降限定ならstr.each_line.with_indexでいいんじゃないの。 それより前だったらstr.each_with_indexでいいし。
each_with_index自体あんまり使わないから正直どうでも良い
行志向のファイルを処理するスクリプトを書かない人には無用の長物だな
全機能使って書いてるのはRubyを作ってるモルモンくらいでしょ
昔どのメソッドが何するもんかは覚えても実際使わないと忘れて逝くのが人類です
>>894 1.9でString#eachがなくなって Enumerableじゃなくなったのはそれが理由だよね
バイト単位なのか、文字単位なのか、行単位なのか一般的には決まらないので
自分で明示して each_byte か each_char か each_line を使えと
でも自分スクリプトで
Stringが行単位のEnumerableなのを利用して
いきなり文字列の sort とかuniqとかしてたんだよね
で、1.8.6以前と1.9以降の両方で動くようにスクリプトの頭で
unless String.method_defined?(:each)
class String
alias each each_line
include Enumerable
end
end
>897-898 $.
1.9なら str.each_line.with_index {|line, idx| ... } でFA。でかい配列を作ったりもしない。
911 :
デフォルトの名無しさん :2009/01/29(木) 16:35:48
動作に必要なRuby標準スクリプトとRubyインタプリタを無理矢理固めて単なるひとつのexeにしたものだと考えてよい あんまし一般的でも効率的でもないが(所詮スクリプトだ)、Rubyで実行して欲しいものを配布するときには便利なので使われる
913 :
912 :2009/01/29(木) 17:04:26
レスどもです。 なるほど、そういうことだったんですね。 でも、ってことはこういうことってrubyに限らずperlとかpythonでも出来るんでしょうか? それともrubyだけそういう風にまとめる機能が提供されているんでしょうか??
>>911 つ exerbでggrks
>いまからrubyを勉強しようと思ってるんですが
まずは勉強するとかぬかす前に自分で調べろ
調べてもわからんかったなら聞けよ、粕
>>913 ある程度メジャーな言語なら大抵あるはず
どこかの暇人の方が外部ツールって形で公開してくれている
>>913 >でも、ってことはこういうことってrubyに限らずperlとかpythonでも出来るんでしょうか?
可能です、でもここではそれ以上教える気はしません。
理由はスレタイ。
>それともrubyだけそういう風にまとめる機能が提供されているんでしょうか??
>>914 が書いてあるのがRubyのexe形式にするやつ
917 :
911 :2009/01/29(木) 17:15:54
ありがとうございましたm(_ _)m
case の構文で、case の途中でそのブロックから脱出したい場合はどうやってかけばいいですか?
>>918 breakは・・・ダメなのか。
もともとcase文で途中で抜けたくなるような長いコードを書くのは
見通しが悪くなりやすくて不向き。
breakしたい部分は関数に切り分けてreturn使うか
十分短いのなら条件分岐で終端まで進ませてしまうとか。
おれもif文で事足りないならwhenの中が長すぎると思う
「caseの途中で」がいまいちようわからん。 when節ではふつーにbreak効くよな。
>>921 >C 言語と異なり、break はループを脱出する作用だけを持ち、case を抜ける作用は持ちません。
case 1
when 1
break
end
LocalJumpError: unexpected break
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
Ruby覚えようと思って本読んだりコード書いたりしてみたんだが どうもPerl臭と俺俺オブジェクト志向が俺には合わないんだが なんか良い学習方法はない? 経験ある言語はJava(ゲーム作れる程度)、JS(IE6,7、mozilla系、opera、Konqueror対応のクロスブラウザライブラリ自前で組める程度)、多少Python(捨てアプリ作る程度)でC/C++はソース読める程度。 なんかRubyってPython+Perlって感じでイマイチつかめない。 一度覚えると学習曲線が右肩上がりって聞いたんだが途中でやめちゃった。
オブジェクト指向の実現度に関しては後発でしがらみ無いぶんJavaより上だと思うぜ で、まあ、使う場所がないなら別に無理することないじゃんというのが答だ Rubyのことなんてすっぱり忘れて生きろ
>>924 どの辺が合わないのかを、もっと具体的に聞かないことにはアドバイスのしようがない
なるほど。続けてくれ
>俺俺オブジェクト志向 Perl5のOOPで躓いて、Rubyのおかげで苦手克服できた過去を思い出した。 Rubyが「オレオレ」というのはduck typingだからじゃないかと思うけど prototype basedなJavaScriptとかどうなるんだろうなw
>>918 * 条件分岐でなんとかする
* when節を関数にする
* catchとthrowを使う
catch :from_case_break do |tag|
case cond
when expr1
...
throw(tag) if ...
...
when expr2
...
end
end
関(r
931 :
924 :2009/01/29(木) 21:58:14
duck typingは知ってるしjsでprototype使えば同じことができるからすぐに理解できたんだが 変数宣言に@とか$とか付けたり内部イテレータのブロックの│に違和感覚えるんだよ。 (まあ│はSmalltalkのシンタックスと同じだが) あとRubyの独自の作法がよく分からない。 ソースの見た目がPerlぽいしPerl風に書けるのにPerlの作法はrubyでは使われなかったり。 なんというか色んな言語が混ざってるからruby自身の特徴がよく分からんっていうか。 それ+独自のオブジェクト志向がくっついて来るから余計に分からなくなる。
>変数宣言に@とか$とか付けたり 意味が違うとはいえperlだって付いてるなw >Perlの作法はrubyでは使われなかったり 最近のperlと比べてるからじゃない? rubyが意識してるperlはずいぶん昔のモノだと思う >色んな言語が混ざってるからruby自身の特徴がよく分からん 他の言語の立ち位置から見ようとして 「混ざってる」と捉えてしまってるせいかと
作者によると@はわざとつけたらしいぞ。基本的に作者は記号が好きでないようだ。 で、スコープのでかい変数がたくさんあると、@だの$だらけになってすぐわかるようになってるらしい。
934 :
デフォルトの名無しさん :2009/01/29(木) 22:23:25
多くのLinuxディストリビューションで、標準のスクリプト言語が PerlやPythonで、Rubyが採用されない理由を30文字以内で教えてください。
935 :
924 :2009/01/29(木) 22:26:12
ruby独自の作法が詳しく書いてある紙媒体ってない? 入門レベルの本だとそういう部分が詳しく載ってなくて、 そういう本に載ってるコードだと他の言語に簡単に置き換えられるようなものばかりでrubyの特徴が見えてこないんだよ。
>>934 Kondara MNU/Linuxの轍を踏みたくないから(28字)
>>931 君は、Rubyを覚える必要に迫られていないんじゃないのか。
Rubyは最新の機能・思想を節操なく詰め込んだ汚い言語だから、
ちょっとやってみよう、レベルの動機で身につけるのは無理だぜ。
作者はプログラミングが楽しくなる言語を作ったと言っているが、
Rubyをやってて楽しい人なんか、作者を含めてこの世にいないだろ。
君 は う ン こ
>>934 Linuxは共産主義である一方宗教のRubyとは相容れない為(30字)
>>936 またそんな誰も覚えてないような過去を穿り出す
Ruby1.8.6持ってったらまた違ったかもしれないけどね
941 :
924 :2009/01/29(木) 23:02:22
>>937 >Rubyを覚える必要に迫られていないんじゃないのか。
まあ、これといって迫られてる訳じゃないんだ。
単にRPGエンジン作るの手間かかるからツクールVXでも買って少しずつシステムいじろうとか、
ruby覚えたらスクリプト言語をPythonから乗り換えようかと思ってね。
>作者はプログラミングが楽しくなる言語を作ったと言っているが、
>Rubyをやってて楽しい人なんか、作者を含めてこの世にいないだろ。
これはmjd?
>最新の機能・思想を節操なく詰め込んだ汚い言語
D言語と似てるな。そう考えると枯れるの待っといた方が良いような気がするが・・・。
そうか試すには敷居が高そうなんだな。
942 :
934 :2009/01/29(木) 23:03:31
皆さんありがとうございました。 回答受付は締め切ります。
>>935 プログラミング言語 Rubyあたりおすすめ。
>>935 うさぎ本(第二版はうさぎでなかったっけ?初版しか持ってないから違ったらスマン)
>>943 ,944
オライリーから出てるDave&AndyのProgramming Ruby?
thx!時間が空いた日に本屋回ってみる。
まだ真珠ほど枯れてなくて、成長過程にある言語だから、他言語エキスパート向けの詳しい書籍って無いと思うぞ。 書籍であるのは、入門用ばっか。エキスパートはオンラインで解決するなり自分でクラス解析するかと。 犬は鳥同士で生き残りをかけてユーザ争奪戦繰り広げて、足引っ張り合ってるしなあ。 市民、無料奉仕は幸福であり義務です状態。他の鳥の共産主義ぶり体制を暴いていかにして息の根を止めるかばっかり。 未だに、窓みたいにプレインスコ標準じゃないし、XPのプレインスコにも負けてしまうほど無料配布のはずなのに高額販売の状況。 そのうち、スクリプトとかネットとか知らなくても便利に成って来ると、どんどん人類は忘れてしまうのだろうな。 もうハンドアセンブルとかATコマンドも忘れられてそうだし。
>>945 ウサギ本の初版(1.6で書かれている)はピアソンから出てるやつ
第二版(1.8で書かれている)は確か文法とライブラリで二冊にわかれて出てるやつ
プログラミング言語Rubyといったら、フラナガンとmatzが書いたやつじゃなろうか なんとなくK&Rの面影が残ってるような印象を受けた 何でだろう?
プログラミングRubyはRubyWayと両巨頭の本
回答受付締め切ったと言ってるけど、二つだけ突っ込む
>>941 >これはmjd?
それが本当なら、業務で強制されることも少ないRubyを
これほど多くの人が使ってるわけがないだろ
Rubyをやってて楽しい人がRubyを使ってるんだよ(基本的には)
> D言語と似てるな。そう考えると枯れるの待っといた方が良いような気がするが・・・。
1.8系列においては、Rubyはもうだいたい枯れてる
そして1.9への移行では一気に新しくなるから、おそらくこれ以上待ってても今以上に枯れたりはしない
書籍の説明がぐちゃぐちゃになってるな。
しかし、
>>924 が読むべきは『初めてのRuby』じゃまいか?
テンプレくらいは目を通した上で質問してるに決まってるだろ
初めてのRubyには「これがRuby的な書き方」みたいなことが結構載ってるな テンプレからではわかるまい
958 :
デフォルトの名無しさん :2009/01/30(金) 15:03:14
なんかよく見ると一人で何かと戦ってる奴が居るな。
>>951 とか。
ruby素人から見るとrubyのコミュニティーはこういう変な信者が多いから近づき難い。
見当外れにjava叩いて喜んでるC#厨と似たようなもんだ。
信者やるのは結構なんだが他の言語のスレとかに出張しないでくれ。
アンチrubyが釣られて騒がしいからさ。
掘り返すあなたも彼らと同類
>>959 みたいなのは自分が新生だと思っているからたちが悪い
自分が新しい概念持ち込んだと思い上がってやがる
もし戦ってるものがあるとしたら既出と戦っているのだ
「それ」は何百回も議題にされこちらは呆れ疲弊している
962.gsub!('595', 959)
脊髄反射的なレスだったな
Rubyスレにストレスの捌け口求めてやって来る奴も勘弁して欲しいよね なんでおまえが不幸だからってこっちも不幸にならないといけないのか
実害無いのに、不幸にされてるという妄想も痛いと思うがwww 真珠の次とか大きな事逝ったからには、ある程度既存のスクリプト書きからの挑戦があるのは必定。 そういうスクリプト書きを納得させてこそユーザが増えると思うよ。 松本教に入信しないと使わせません。一切の文句を禁止します。って閉鎖的になるのも道の一つ。 付属ライブラリとか充実してるとは思えないし、まだまだ拡充しないと他の言語に比べて使いにくいでしょ。そういう意味ではまだ枯れてないと思ってたけど。 それとももう枯れてると言うように、付属ライブラリの充実は今後見込めない?
自演や成りすましが横行してるのに信者かアンチかなんてよくわかるな。 付属ライブラリの話は色々な立場や意見があるから難しいんじゃね。 個人的には逆に絞り込んでコンパクトにして欲しい。
>実害無いのに、不幸にされてる いや、あの… 正直邪魔だわ…
module M1 class C1 ... end class C2 ... end end という既存のモジュールを「継承」して module M+ class C1+ def initialize(param) # super のようなものでM1::C1::new(param)を呼ぶ end class C2+ ... end end というモジュールを作りたいです(M1::C1にあるメソッドをC1+内で極力インスタンスメソッド形式で呼びたい) どう書くのが普通ですか? モジュールは < で継承できませんよね
ん module M+ include M1 end でメソッド呼べない?
class C1+ < M1::C1 注目すべきはモジュールじゃなくて モジュールに含まれる*クラス*のような?
>>969 あ、これめんどくさいよね
作るときはとりあえずmoduleで括っておくといいという風潮にはちょっと辟易中
HashのValueに配列っていれられるんですか? AとBのハッシュがあって、CにAとBのKeyが一緒のときに CのKeyにAとBのKey、CのValueにAとBのValueを配列として入れる AとBを互いにeachしてkey比較してtrueの時に・・・ってとこでつまづいています
>HashのValueに配列っていれられるんですか? キーも値もなんでも入る(あとで取り出せないような動的なものもキーに指定だけはできたりする) A.each_key.do |key_a| if B.has_key?(key_a) then C[key_a] = [A[key_a], B[key_b] end end
A.each_key.do |key_a| if B.has_key?(key_a) then C[key_a] = [ A[key_a], B[key_a] ] end end だった ハッシュのキー指定の [ ] と 配列の [ ] が混じってわけわからん状態になってるが
>>975 ありがとうございます
1行目でAのKeyを取り出して2行目でBのKeyと比較
3行目でValueが出てきていないのですがどうしてですか?
>>976 いや出てるだろ
ハッシュに [ ] つきでキーを指定してるんだから、それに対応した値が返ってるだけだ
ハッシュAでkey_aに対応する値 A[key_a] と、ハッシュBでkey_a(実質key_bに等しい)に対応する値 B[key_a]
>>977 すいません.理解しました!ありがとうございます!!
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
【Ruby1.9.1 は開発途中であり初心者には向きません】
【最新安定版の Ruby1.8.7 での習熟をお勧めします】
※1.8.7 は1.8 系と 1.9 系の橋渡しをするためのリリースです。
1.9系 の新機能の一部が利用可能なので初学者にお勧めです。
※ただし十分安定しているとは言えないので安定性を問題とする用途には向きません。
関連スレやURLは
>>2-8 あたりを見てください。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を読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
980 :
デフォルトの名無しさん :2009/01/31(土) 05:16:08
Ruby1.9.1キタ――――――(゚∀゚)――――――!!
>>979 開発途中呼ばわりはひどいな、と思うけど
確かにRuby 1.9.1を初心者に薦めて良いかどうかは難しいところだな
きちんと対応してるライブラリも少ないし
「Ruby1.9.1は前安定版の1.8系から非常に多くの変更があり
まだ対応していないライブラリも多いため、初心者には向きません」
ぐらいで良いんじゃないか?
書籍なんて1.8.6に対応してるけど1.8.7に対応したのまだ出てない(出てるっけ?) そう考えると1.9.1なんてまだまだ出ない 下手に初心者が1.9.x弄るとRuby入門段階で挫折するおそれがある 初心者は1.8.xから入った方が無難
【最新安定版の Ruby1.8.7 での習熟をお勧めします】 ※1.8.7 は1.8 系と 1.9 系の橋渡しをするためのリリースです。 1.9系 の新機能の一部が利用可能なので初学者にお勧めです。 ※ただし十分安定しているとは言えないので安定性を問題とする用途には向きません。 これ見ると1.8.7も安定していないととれるけどそういうこと?
まあ1.8.7は1.8系と1.9系の橋渡し的なバージョンなんで安定版とは言えないような気もする。 1.8系を使用してきたユーザーがいきなり1.9系に乗り換える前のお試し版的なもの。
>>979 1.9.1が正式リリースされた今、
> 初心者には向きません
とはいうべきではないような。難しいね。
パッチが50以上あたってから使いましょうですか、わかりません。
平成うまれですねわかります
大正生まれです、わからなかったのですね
既存のアプリやライブラリで、1.9では動かないものがけっこうあるね。 しばらくRubyは混迷の時代に入るんじゃないかなあ。 初心者や、業務使用目的の場合は1.8系が無難だね。
前から言われてたように1.8と1.9で互換性があまり取れてないからね
文字列周りに手を入れたんだから、さもありなん
もうPerlのことわすれたからな Rubyのこと忘れる日も近いんじゃないかな
取れてないんじゃなくて敢えて切ったんだよ だからこそ1.8.7が出たわけで、1.8と1.9に関連性を求めてはいけないし、それで文句を言うのは逆切れに近い 【Ruby1.9.1 は従来版とは別物であり、書籍や解説やライブラリのサポートがまだありません】 【自力で解決できない壁で悩むことのない最新安定版の Ruby1.8.7 での学習をお勧めします】 ※1.8.7 は 1.8 系と 1.9 系の橋渡しをするためのリリースで、1.9 系 の便利新機能の一部が利用可能です ※ただし 1.8.6 より安定しているとはまだ言えないので安定性を第一とする用途には 1.8.6 をどうぞ もうめんどくさいし残レスも無いからこんなんでスレ立てるぞ
>>993 前より良くなったじゃないか、それでおk☆
573
>375
うめ
うめ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。