Ruby初心者質問スレPart2
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
05/02/08 03:02:27Ruby Home Page
http://www.ruby-lang.org/ja/
前スレ
Ruby初心者質問スレPart1
http://pc5.2ch.net/test/read.cgi/tech/1100534824/
本スレ
Rubyについて Part 14
http://pc5.2ch.net/test/read.cgi/tech/1103997158/
0002デフォルトの名無しさん
05/02/08 03:03:17: 【Ruby】RubyでCGI
http://pc5.2ch.net/test/read.cgi/php/988948655/
: 【最高言語】 Rubyist Magazine創刊 【ルビま!】
http://pc5.2ch.net/test/read.cgi/tech/1094825807/
= 関連スレ?
: RUBYの宿題教えてください。
http://pc5.2ch.net/test/read.cgi/tech/1106572657/
= 関連リンク
: リファレンス
http://www.ruby-lang.org/ja/man/
: Ruby Weekly News @ Ruby Garden
http://www.rubygarden.org/rurl/html/
: ruby-cvs
http://rrr.jin.gr.jp/rwiki?cmd=view;name=ruby-cvs
: Ruby hotlinks 五月雨版
http://rrr.jin.gr.jp/~znz/samidare/
: 日本Rubyの会
http://jp.rubyist.net/
: Rubyist Magazine
http://jp.rubyist.net/magazine/
: <rubyXML/>
http://www.rubyxml.com/
: Matzにっき
http://www.rubyist.net/~matz/
0003デフォルトの名無しさん
05/02/08 03:22:390004デフォルトの名無しさん
05/02/08 03:26:230005デフォルトの名無しさん
05/02/08 03:55:350006デフォルトの名無しさん
05/02/08 10:18:01可能性がわずかにはあるかも。開発にRubyを使う案件って稀みたいです。
C++など他の言語で開発する際に、支援ツールをさくっと作るには便利ですよ。
私もそれでかなり重宝してます。
0008デフォルトの名無しさん
05/02/08 12:03:30実質的に統合されるなら削除依頼出します。
0009デフォルトの名無しさん
05/02/09 07:08:10別に統合しなくても良いと思うよ
0010デフォルトの名無しさん
05/02/09 14:03:12前スレも3ヶ月で1スレ消費程度に需要があったし。
……MW 祭りやらスクリプト爆撃の影響が、かなりある気がするけど。
0011デフォルトの名無しさん
05/02/09 15:07:28MW版Rubyの進捗状況が気になって同氏のWikiを拝見しようと思ったら、
サーバが落ちてました...。一時的なダウンなのかな?
0012デフォルトの名無しさん
05/02/09 16:48:49なお、進捗なんてないのでいちいち見る必要はなさそうです。
0013デフォルトの名無しさん
05/02/09 20:44:560014デフォルトの名無しさん
05/02/10 09:24:150015デフォルトの名無しさん
05/02/11 14:07:470016デフォルトの名無しさん
05/02/13 08:38:33文字列を外からあたえて、それに応じてインスタンスを
作成する方法に関してです。以下では、簡単のために、
ClassAと ClassB の二つにして説明します。
class ClassA
def initialize
end
def out
puts 'AAAA'
end
end
class ClassB
def initialize
end
def out
puts 'BBBB'
end
end
(1)引数で ClassA もしくは ClassB という文字列を与えて、
二つを使いわけることを考えます。
もちろん、場合分けして明示的に書けば可能です。
(次の記事に続きます)
0017デフォルトの名無しさん
05/02/13 08:39:15以下のようにeval を使うことになります。
(ここももっと良い方法があれば教えてください。)
str = ARGV.shift # 引数として ClassA を与える
eval('x = ' + str +'.new')
eval('x.out' ) # << ==== (*)
(3) 質問は(*)の行に関してですが、
(Q1) evalを使わないとエラーになるのは何故でしょうか。
(Q2) x を使った作業が以下に延々と続くとした場合、
逐一evalを使用するのがうっとおしい。
何か回避策があるでしょうか。
以上です。よろしくお願いします。
0018デフォルトの名無しさん
05/02/13 09:49:45x.out
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/40021
からのスレッドが参考になると思う。
0019デフォルトの名無しさん
05/02/13 10:55:08結城さんのデザインパターン本(Javaによる)を読みながら
rubyに引きなおして考えています。そのなかでの疑問でした。
教えていただいたスレッドによると、FAQのようですが、
かずひこさんもすぐには思い付かなかった様子ですので、
サンデープログラマとしてはちょっと安心もしてます。<grin>
勉強になりました、感謝します。
(Q1)の関係でbindingというのも知りました。
0020デフォルトの名無しさん
05/02/13 16:06:51クラス名があらかじめ列挙できるなら
hash = { "ClassA" => ClassA, "ClassB" => ClassB, }
klass = hash[ARGV.shift]
obj = klass.new if klass
クラス名があらかじめわからない場合は、この方法は使えないけど。
0021デフォルトの名無しさん
05/02/13 17:28:560022デフォルトの名無しさん
05/02/13 20:47:33goRua <ttp://www.unixuser.org/~haruyama/software/goRua/> とか
0023デフォルトの名無しさん
05/02/18 19:25:18/tmp/mysql.sock がなくて経由できなくて使えないのだが、そういうものなの?
0024デフォルトの名無しさん
05/02/18 20:33:42ttp://kobe.cool.ne.jp/matsut/ruby_mysql.html
ttp://www.mysql.gr.jp/mysqlml/mysql/msg/9811
002523
05/02/18 21:00:23ありがとん。
つか、普通に 127.0.0.1 で逝けたのね orz
ちゃんと設定すれば hostname でも可能なのかもしれない。
Ruby/MySQL の方は MySQL の方のバージョンが高くて駄目ぽ。
あとは地道におぼえていこう......
0026デフォルトの名無しさん
05/02/25 01:56:52みたいに String を bigram に分割したいのですが、
どう書くのが普通なんでしょうか。
下のメソッドみたいな1文字ずつに分割しといて後で2つくっつける方法よりも、
2文字マッチさせて1文字ずらす方法の方が効率よさそうに思うのですが
うまくコードが書けません。
def bigram(str)
prev = nil
str.scan(/./).inject([]) do |result,ch|
result << prev+ch if prev
prev = ch
result
end
end
0027デフォルトの名無しさん
05/02/25 02:21:18(0..(s.size-2)).collect{|i| s[i..i+1]}
#=> ["ru", "ub", "by"]
0028デフォルトの名無しさん
05/02/25 04:14:350029デフォルトの名無しさん
05/02/27 00:36:12「File.openできません」と言われます。ensureではだめなの
でしょうか?
dir = Dir.open(".")
begin
dir.collect{|f| [f]}.each do |fname|
begin
file = File.open(@dir + fname, "w")
while line = file.gets
print line
end
file.close
rescue
file.close
raise
end
end
ensure
dir.close
end
0030デフォルトの名無しさん
05/02/27 02:07:02Dir.foreach('.') do |fname|
next unless FileTest::file?(|fname|)
fp = File.open(@dir + |fname|, "w")
...
end
0031デフォルトの名無しさん
05/02/27 02:08:34Dir.foreach('.') do |fname|
next unless FileTest::file?(fname)
fp = File.open(@dir + fname, "w")
...
end
0032デフォルトの名無しさん
05/02/27 05:53:060033デフォルトの名無しさん
05/02/27 09:35:41a[1,2,3,4]
a[1,0] = 6
a == [1,6,2,3,4]
最後の評価がtrueにならないのはなぜですか?
0034デフォルトの名無しさん
05/02/27 09:36:25の誤りですた
0035デフォルトの名無しさん
05/02/27 10:18:43ありがとうございます。nextとFileTestを組み合わせるのが、
私には理解しやすかったです。(まつもとさんのruby本では、
FileTestの記述が少ないですね。)
0036デフォルトの名無しさん
05/02/27 11:19:06parenthrsize argument(s) for future version.
理由がよくわかりません・・・
0037デフォルトの名無しさん
05/02/27 12:46:35何がしたいのか分からんが
a = [1,2,3,4]
a[1,0] = 6
p a
0038デフォルトの名無しさん
05/02/27 15:07:17将来問題が出る可能性のある書き方をしているから。
というか、実際のコードを出さない理由がよくわかりません・・・
0039デフォルトの名無しさん
05/02/27 15:15:500040デフォルトの名無しさん
05/02/27 16:11:31失礼しますた。
class Point
attr_reader :x,:y
def initialize(x,y)
@x = x
@y = y
end
def eql? other
self.class == other.class and
@x == other.x and
@y == other.y
end
end
p1 = Point.new(1,1)
p2 = Point.new(2,3)
p1.eql? p2 # 警告
p1.eql?(p2)
0042デフォルトの名無しさん
05/02/27 16:39:48構文解釈の問題だ
0043デフォルトの名無しさん
05/02/27 17:08:56括弧の省略が重なった時に出るんじゃないの?
$ ruby -e 'p p 0, 1'
-e:1: warning: parenthesize argument(s) for future version
0
1
nil
p(p(0,1)) なのか p(p(0),1) なのか曖昧なので、
(今のところ前者と解釈してるけど)今後はこの書き方はやめようね、と。
004440
05/02/27 17:27:56puts p1.eql? p2
とやってました。
puts(p1.eql?,p2)とputs p1.eql?(p2)
が近い将来曖昧になりえるということですね。
どうもありがとうございました。
0045デフォルトの名無しさん
05/02/27 17:30:34プログラムを書く場合エンコードの指定とかってできますか?
0046デフォルトの名無しさん
05/02/27 17:55:41もしくは $KCODE = 's' を指定する
で、駄目?
0047デフォルトの名無しさん
05/02/27 19:01:22> puts(p1.eql?,p2)とputs p1.eql?(p2)
> が近い将来曖昧になりえるということですね。
もともと曖昧なので「これからはそういう書き方はヤメロ」といわれてるのだよ。
0048デフォルトの名無しさん
05/02/27 19:03:07SJISの文字コードのテキストファイルの中身を全てSJISの文字コードのコンソー
ルに表示するだけなら、エンコードの指定って関係ないはずだが。
IO.foreach("inputfile"){|line| print line}
0049デフォルトの名無しさん
05/02/28 02:36:270050デフォルトの名無しさん
05/02/28 05:43:58print なら解るが。
0051デフォルトの名無しさん
05/02/28 08:22:15でかいファイルだとメモリが…
0052デフォルトの名無しさん
05/02/28 13:43:35printとwriteの違いは何?
0053デフォルトの名無しさん
05/02/28 14:27:51違いっていうか、 Kernel#write ってそもそもあったっけ?
0054デフォルトの名無しさん
05/02/28 17:35:48ソースを確認してないけど、
print, puts, putc, << ここら辺は内部で write が呼ばれてるんだっけ?
でも、>>45 で「コンソールに表示する」と書かれてるから、
>>49 のままでは使えないと思っただけ。
$stdout.write(File.read("inputfile")) なら解る。
ズレたこと言ったのならゴメンよ。
0055デフォルトの名無しさん
05/03/02 05:11:46write 変換なし
0056デフォルトの名無しさん
05/03/02 14:31:530057デフォルトの名無しさん
05/03/02 14:59:330058デフォルトの名無しさん
05/03/02 21:09:27IO.foreach("inputfile", &method(:print))
$stdout.write(File.read("inputfile"))
0059デフォルトの名無しさん
05/03/02 23:21:06STDOUT.write nil
とか。あとprintは$_、$,、$\を使う、戻り値がprint => nil、write => 出力できたバイト数、とか。
0060デフォルトの名無しさん
05/03/03 02:32:320061デフォルトの名無しさん
05/03/03 02:42:040062デフォルトの名無しさん
05/03/03 12:56:48>>54
0063デフォルトの名無しさん
05/03/04 00:43:300064デフォルトの名無しさん
05/03/05 06:23:160065デフォルトの名無しさん
05/03/05 06:39:580066デフォルトの名無しさん
05/03/05 09:37:10なんでInteger#succ!がないんだろ
0067デフォルトの名無しさん
05/03/05 10:58:590068デフォルトの名無しさん
05/03/05 14:24:191.succ!ってやったら1==2になっちゃうなんてのはイヤだろ?
0069デフォルトの名無しさん
05/03/05 15:08:03007067
05/03/05 15:14:36O Fixnumがimmutableだから
007169
05/03/05 15:38:52O Fixnum が mutable な Ruby
つられて間違ってしまった・・・orz
0072デフォルトの名無しさん
05/03/05 22:39:170073デフォルトの名無しさん
05/03/05 22:57:05Cで1++ってやったら1==2なんのか?あ?
0074デフォルトの名無しさん
05/03/06 00:55:270075デフォルトの名無しさん
05/03/06 03:00:400077デフォルトの名無しさん
05/03/09 06:25:27p "『".gsub!('a','A')
がうちの環境ではnilになるのですがどうしてですか。
コードはEUCです。
0078デフォルトの名無しさん
05/03/09 06:37:06str = "『"
p str.gsub!('a','A') #=> nil
p str #=> "『"
str = "abc"
p str.gsub!('a','A') #=> "Abc"
p str #=> "Abc"
対して gsub は、変更した文字列を返し(変更されなかったらコピー)、
元の文字列はそのままです。
str = "『"
p str.gsub('a','A') #=> "『"
p str #=> "『"
str = "abc"
p str.gsub('a','A') #=> "Abc"
p str #=> "abc"
0079デフォルトの名無しさん
05/03/09 06:45:47やってみたら、本当ですね。
!のあるなしでかなり違うのですね。
初心者バレバレです。精進します。
0080デフォルトの名無しさん
05/03/09 18:55:16仮に漏れがバカだとしてバカでも知っている常識すら知らないことを威張るなよ低能が。
0081デフォルトの名無しさん
05/03/09 19:09:44!が末尾についているメソッドは、ついていないメソッドと同等の効果があっ
て自身を変更する。戻り値については nil だったりいろいろ。
なので、戻り値は考えないで自分自身を書換える場合は gsub! などを使い、
自分自身を書換えずに戻り値を使いたい場合は gsub を使う、とかいう風に使
いわけるといいよ。
といっても、文法的に決まってたりとかいう事ではぜんぜんないので、そのメ
ソッドが自分自身を本当に破壊的に変更するかどうかはあらかじめ確認しとい
た方がいい(Array#rejectあたりが典型例)。
0082デフォルトの名無しさん
05/03/09 20:55:05>>1 のページのチュートリアルは何故あんなにセンスが悪いんすか?
0083デフォルトの名無しさん
05/03/09 21:15:43m9(^Д^)プギャ-
0084デフォルトの名無しさん
05/03/10 01:51:54だからといって foo が破壊的でないとは限らない。
0085デフォルトの名無しさん
05/03/10 18:58:09喋れば喋るほど知能の低下を如実に現してる。
こーいうのが偉そうに喋ってたのかよw
相手してた奴が恥ずかしいなw
0086デフォルトの名無しさん
05/03/10 19:54:41その説が結論に至る過程が正しくないということです。
ですから、結論を肯定することも否定することもその説が正しいかどうかの検証にはなりません。
理論というものは例で補強されるものではなく理屈で補強されるものです。
例などはなくても考え方の筋道が通っていれば正しいのですし、
逆にいくら例があっても筋道の通っていない考え方は間違いなのです。
なお誤解のないように付け加えておきますが、「例を示す」というのは筋道の通った考え方の一つです。
例を示さなくていいとか例を示してはいけないというわけではありません。
例を示しさえすればいいというのが間違いなのです。
0087デフォルトの名無しさん
05/03/10 21:43:56完璧に同意。
そして理論というものはトップダウンにかくと分かりやすいものなのだが、
その理論の入り口にいる時にはトップダウンに抵抗を感じるもの。
そのことがマニュアルやチュートリアルをかくことを難しくしているのだと思う。
こういう時は「目的」や「例」などをふんだんに使いながら低い所から登って行くしかない。
0088デフォルトの名無しさん
05/03/11 01:11:160089デフォルトの名無しさん
05/03/11 01:31:230090デフォルトの名無しさん
05/03/11 18:32:39が動かなくなったんですが、良い解決策ありませんか?
「erb使え」ちゅうのは無しで。
str = '"a" = #{a}'
s = "12"
puts eval( str.inspect )
以前の結果、"a" = 12
現在の結果、"a" = #{a}
0091デフォルトの名無しさん
05/03/11 18:36:13s="12" は、a="12" の間違いです。
0092デフォルトの名無しさん
05/03/11 19:17:51puts eval(str.inspect.gsub(/\\(?=#[$@{])/n, ''))
inspectとevalはできるかぎり逆変換になることが期待されるので、
今のほうが本来意図された動作。
009392
05/03/11 19:27:230094デフォルトの名無しさん
05/03/11 21:22:18いや、inspectにはそんなことは期待されてない。
evalしたいならString#dumpを使うのが正しい。
それ以外は92の言ってる通り。
0095デフォルトの名無しさん
05/03/11 21:53:070096デフォルトの名無しさん
05/03/11 22:10:52でも inspect にそんなことを期待している人は意外と多い罠。
0097baka
05/03/11 22:43:31そんなことできるソフトなさそうなので自分でちゃっちゃっとスクリプト書こうと思っています。
といってもあまりノウハウがないので、なにか参考になるページあったら教えてください。
0098デフォルトの名無しさん
05/03/11 23:08:02で、Rubyはどの程度書けるわけ?
0099デフォルトの名無しさん
05/03/11 23:33:48逆に聞くけど、お前はどの程度なわけ?
0100baka
05/03/12 00:01:08汎用的なのだと難しいから、ひとまず今変換したいやつだけ変換できれば良いので。
ちょっとRAAを覗いてみます。Rubyコミュニティってなんとなく感じ悪い…
0101デフォルトの名無しさん
05/03/12 00:28:48ところでTeX2pageってこれ?
http://www.ccs.neu.edu/home/dorai/tex2page/tex2page-doc.html
Schemeとかで動くって書いてあるから多分別物だと思うけど……。
■ このスレッドは過去ログ倉庫に格納されています