Ruby について Part 3
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGRuby Home Page
http://www.ruby-lang.org/ja/
<前スレ>
Rubyについて Part 2
http://pc3.2ch.net/test/read.cgi/tech/1028906179/
<過去スレ>
Rubyについて
http://pc3.2ch.net/test/read.cgi/tech/1012096319/
0554デフォルトの名無しさん
NGNG0555デフォルトの名無しさん
NGNG>>553みたいに
話が通じない事多い。
0556Rubyist@553
NGNGしらなかったんだよシラネーよ知って根ーよシラララララララネネネネネネネシラネー
ヨヨヨヨヨヨヨヨヨヨヨヨヨヨヨヨ
ブァベブチャグチャグハアァァアアアアァァブァァアアァアアウアウアアウアウウウウウアウウアウウアあうアウアアウアウガアアアアアウゥァウガアカカカガ゙カクククセゼグギ
0557デフォルトの名無しさん
NGNGをダウンロードし、
\bin\gdbm.dll 21,504 03/04/22
を、gdbm.soとリネームし、
require 'gdbm' したところ、
\hage.rb:1:in `require': 127: 指定されたプロシージャが見つかりません。 - Init_gdbm (LoadError)
./gdbm.so
が出てしまいました。
ruby 1.6.8 (2002-12-24) [i586-mswin32] です。
0558デフォルトの名無しさん
NGNGまあ、元の聞き方が悪いから仕方がないけど。
それはrubyから(gdbmモジュールを通して)使うgdbmライブラリ本体だよ。
それくらいzipファイルの中身を見て見当つけなさい。
0559デフォルトの名無しさん
NGNGというのはいかがなものか。
0560デフォルトの名無しさん
NGNG0561デフォルトの名無しさん
NGNG後学のためにどう聞けば良かったか教えてください。
0562デフォルトの名無しさん
NGNG558じゃないけど。
Makefileがどう妙なの?
どうやってMakefileを作ったの?
rubyのバージョンは?(557に書いてあるけど)
あたりは最低限必要かと。
それがわかれば、もうちょっとましな質疑応答になると思われ。
ちなみに、今回の場合は、550が嘘で552は本当だけどミスリーディング。
0563デフォルトの名無しさん
NGNG0564デフォルトの名無しさん
NGNGunix板の情報整理スレでも「メモはRDで書いてる」ってのが
何度か挙げられていたから、良いモノなのかも。
0565デフォルトの名無しさん
NGNG0566デフォルトの名無しさん
NGNG0567デフォルトの名無しさん
NGNGttp://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=Google+UTF-8+%E6%A4%9C%E7%B4%A2%E6%96%87%E5%AD%97%E5%88%97+Ruby&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
のq=???の日本語部分のデコードができなくて困っています。
CGI.unescape や NKF してたんですが、うまくいきません。
UTF-8だからかな?
できればポインタなどお願いします。
0568デフォルトの名無しさん
NGNGUTF-8は現nkfでは扱えない(nkf自体Unicode制定前のものだから当然だが)ので、
uconv,iconv,unkfあたりを使う。在処は
uconv: RAA
iconv: 1.8では標準、1.6ならshim
unkf: rough
0569デフォルトの名無しさん
NGNGさがしてやってみます。
0570567
NGNGunkfをインストールして、
require "cgi"
require "unkf"
q="%93%FA%96%7B%8C%EA"
NKF.nkf("-e", CGI.unescape(q))
で、EUCの文字列が取得できました。
どうもありがとうございます。
0571デフォルトの名無しさん
NGNGとすると、nilと表示されてしまうのですが、これを何も表示されないようにしたい。
class NilClass
def to_s
''
end
end
としても、
def nil.to_s
''
end
としても、nilと出力されてしまう。
どうすればよいか、知恵を拝借したい。
printを再定義しないとだめ?
0572デフォルトの名無しさん
NGNGつか、print 対象に nil がこないようなロジックにすべきじゃないかと。
0573デフォルトの名無しさん
NGNG諦めてprintを再定義してくれ。
>>572
inspectをどれだけ変えても無駄では?
なにしろ、printのソースが
case T_NIL:
rb_io_write(out, rb_str_new2("nil"));
だ。
0574デフォルトの名無しさん
NGNGあ、ほんとだ。早とちりだった。
0575デフォルトの名無しさん
NGNGまじで?ソースコード埋め込みだったのか。
質問の背景を説明すると、RubyでCGIを作成してて、
cgi = CGI.new
user, = cgi['user']
mail, = cgi['mail']
print user, "<br/>\n"
print mail, "<br/>\n"
としてるんだけど、このときuserやmailがnilと表示されるので
どうにかしたかった。いちいち
user ||= ''
mail ||= ''
とするのもうざったいし。
こんなとき、みんなはどうしてるの?
0576デフォルトの名無しさん
NGNGもっといい方法がありそうだが、
user = cgi['user'].first || ''
なんてのはどうだろう。一行で書けるし。
0577デフォルトの名無しさん
NGNGprint "#{mail}<br/>\n"
0578デフォルトの名無しさん
NGNG576+577で脳内idiom化済み。
0579デフォルトの名無しさん
NGNG最初はこうしてたんだけど、
http://localhost/login.rbx
と
http://localhost/login.rbx?username=&password=
とを区別したかったので(前者ではcgi['username'][0]はnil、
後者では "" )、使わないことにした。
>>577
これ、うまくいくね。ありがとう。
でもなんで?もし仕組みをしってたら教えてください。
0580デフォルトの名無しさん
NGNGもちろん明示的に
print user.to_s, "<br/>\n"
としても望み通りになる。
0581デフォルトの名無しさん
NGNGうー、そういうことか。
def nil.to_s() とか class NilClass; def to_s() ... とか
していたおれはアホやね。すでにそうなっていたのか。
さんきうです。
0582デフォルトの名無しさん
NGNG0583デフォルトの名無しさん
NGNG現実のコードが複雑なら、質問するときは本質部分だけをとりだした
簡単なものを示すのが普通では?
0584デフォルトの名無しさん
NGNGその「簡単なもの」が571だというならそれはそれで納得なんだけど。
575のようにCGIの入力を無加工でprintに渡すわけはないので、
それまでに別のところでnil問題に遭遇するだろう、ということだよ。
なので、575でいう「こんなとき」はありえない。
0585デフォルトの名無しさん
NGNGソース取ってきて自分でビルドするのと比較して何が嬉しいの?
0586デフォルトの名無しさん
NGNG0587デフォルトの名無しさん
NGNG0588デフォルトの名無しさん
NGNGソース取ってくるほど熱心でないユーザも使う可能性が増える。
0589デフォルトの名無しさん
NGNG0590デフォルトの名無しさん
NGNGだとしたら、使ったバイナリをビルドした設定を記録するのがちょっとは楽になるかな。
0591デフォルトの名無しさん
NGNG???
今いち言いたいことが分からないけど、Un*x と変わらないよ?
0592デフォルトの名無しさん
NGNG0593デフォルトの名無しさん
NGNG0594デフォルトの名無しさん
NGNGでも動かない。
0595デフォルトの名無しさん
NGNG0596デフォルトの名無しさん
NGNG0597デフォルトの名無しさん
NGNG機能限定でいいから軽い YAML 実装ってないですかね?
無きゃ自分で書くしかないんだけど・・・
0598デフォルトの名無しさん
NGNGCygwin入れてない環境でも、Cygwin DLLさえあれば使える。
…mswin32版との具体的な差が気になるところではあるけれども。
0599デフォルトの名無しさん
NGNG「これは見とけ」とか言うサイトや本ある?
もう、馬鹿でも分かるような。
0600デフォルトの名無しさん
NGNG「たのしいruby」あたりはどうかね。
0601名無しさん@xyzzy
NGNGhttp://www.ruby-lang.org/ja/
ユーザーズガイド
http://www.ruby-lang.org/ja/uguide/uguide00.html
リファレンスマニュアル
http://www.ruby-lang.org/ja/man-1.6/?cmd=view;name=Ruby%A5%EA%A5%D5%A5%A1%A5%EC%A5%F3%A5%B9%A5%DE%A5%CB%A5%E5%A5%A2%A5%EB
0602599
NGNGRubyのオフィシャルサイトはもちろん見ましたよー。
でもRubyって、どのサイトも
「プログラミングそこそこ理解できる」が前提みたいな感じで、
まるっきりの初心者対象にしたようなページはあまり見つからないんですよね。
その点で多少敷居が高いと感じたり…。
0603デフォルトの名無しさん
NGNGかばんなぁ。
ところで、「プログラミング初心者」であっても「コンピュータの初心者」じゃ
あないよな?
0604597
NGNGしかし、-ryaml するだけで重いんですよね。
そもそも Racc 自体が重いのかしら・・・?
0605デフォルトの名無しさん
NGNG0606デフォルトの名無しさん
NGNG結城 浩で「Ruby言語プログラミングレッスン」キボン
いや、Rubyはプログラミング初心者にはやさしいつくりではあるが、
解説書で初心者(他言語経験者を除く)にやさしいのはっていうとちょっと?だったりする。
他言語のいい初心者本からRubyにきたほうがいいかもって、本末転倒。
ひと頃と比べるとRuby本の出るペースも落ちてきてちょっとさびしい。
0608597
NGNGほかにも気になるところが沢山あるのですぐには使えないな・・・
もうちょっと調べてみよう。
0609デフォルトの名無しさん
NGNG詳しくレポートきぼん。
量が多ければruby-bugsかruby-devへ。
0610599
NGNGどのくらいの知識と経験を積めば「コンピュータの初心者」から脱出できるのか
分からないので何とも言えませんが、少なくとも、
PCを昨日今日買ってきたというレベルではありません。
以前、まつもとゆきひろ氏の「Rubyプログラミング入門」を入門書として購入しましたが
余計な注釈や、読みづらい本文で(゚Д゚)ポカーン
この本では「楽しいRuby」は無理だと感じました。
0611デフォルトの名無しさん
NGNG注釈云々からすると「オブジェクト指向スクリプト言語Ruby」(通称Ruby本)じゃ
ないかと思うが、あれはまったく初心者向けじゃないよ。
0612デフォルトの名無しさん
NGNGつーことね。
0613デフォルトの名無しさん
NGNG個人的経験からいうと、初心者向けのサイトを作ると覚えるよ。
0614599
NGNGスマソ、今見直したら
「原信一郎 著 まつもとゆきひろ 監修」と書かれてますた。
「著 まつもとゆきひろ」部分だけ見て激しく勘違い。
本の名は間違い無く「Rubyプログラミング入門」。
0615名無しさん@xyzzy
NGNG目的がないからおぼえないんだよきっと。tdiaryとか導入していま流行の
bloggerになってみれば?tdiaryのpluginをかくためにrubyを覚えたひと
もいるよ。
0616デフォルトの名無しさん
NGNG0617597
NGNGsyck-0.15 とかいうのだとダメだったんで、
CVS 最新を取り寄せて試してみたところ、問題なさそうでした。
また何か問題が見つかったら適宜報告するようにします。
0618597
NGNGYAML もっと普及するといいなぁ。
0619デフォルトの名無しさん
NGNG0620デフォルトの名無しさん
NGNGこれ読むまで、
オブジェクト?はぁ?クラス?はぁ?インスタンス?はぁ?
って感じの漏れだったが、これ読んだら概念がちょこっとわかったよ。
ちなみに「たのしいRuby」を読んでもオブジェクト指向がなんなのか
全然理解できなかった。これを読んだあとも
オブジェクト?はぁ?クラス?はぁ?インスタンス?はぁ?
の状態に変わりはなかった。
けど、超基礎から説明してるので、
プログラム自体が初心者の人は「たのしい」から読むべきだろうね。
「Rubyプログラミング入門」はUNIXの基礎とか、プログラムの基礎とか知らないと、
わけの分からん用語の連続になっちゃうよ。
0621デフォルトの名無しさん
NGNGRubyに興味を持ち、先日初めてオフィシャルページを
みてきました。Rubyはvariable declarationがいら
ないようなんですが、そこで質問です。
functionがinteger valueにreturnするときなんか
はどうなるのでしょう?例えばc++で
int function(int i, int j)
{
return i+j;
}
これをRubyでかくと、どうなるのでしょうか?
簡単すぎる質問ですみません。
0622Ruby知らない
NGNG0623621
NGNGすみません。海外在住なのです。
日本の本が手に入らない僻地にいるので、webだけが
たよりなのですが、なかなか簡単なサンプルがないの
で、ここで聞きました。
0624_
NGNG( ・∀・)/< こんなのみつけたっち♪
http://www.hiroyuki.zansu.com/hankaku/jaz03.html
http://hiroyuki.zansu.com/hankaku/jaz10.html
http://www.hiroyuki.zansu.com/hankaku/jaz08.html
http://hiroyuki.zansu.com/hankaku/jaz09.html
http://www.hiroyuki.zansu.com/hankaku/jaz06.html
http://hiroyuki.zansu.com/hankaku/jaz05.html
http://www.hiroyuki.zansu.com/hankaku/jaz01.html
http://hiroyuki.zansu.com/hankaku/jaz02.html
http://www.hiroyuki.zansu.com/hankaku/jaz07.html
http://hiroyuki.zansu.com/hankaku/jaz04.html
0625デフォルトの名無しさん
NGNGdef function(i,j)
return i+j;
end
とも書けるけど、大半のヤシは
def function(i,j)
i+j
end
と書くだろう。
0626デフォルトの名無しさん
NGNGYAMLは、現在開発中の新バージョンは拡張ライブラリになって
おり、これはとっても速いらしい。まだα状態だろうけど。
0627デフォルトの名無しさん
NGNGdef function(i,j) i+j end
p function(1,2) #=> 3
p function("foo"+"bar") #=> "foobar"
型を指定するための方法というのはない
どうしても検査したければ obj が Klass のインスタンスであることを
obj.is_a? Klass によって検査することはできるがあまり使わない
0628デフォルトの名無しさん
NGNG> p function("foo"+"bar") #=> "foobar"
p function("foo","bar") #=> "foobar"
0629621
NGNG夜12時のshowだったのですが、すごい混雑ぶりでした。
>>625, 627
どうもありがとうございます。
本当に型がないのですね。(笑) javaとC++しかしらな
い私にとっては、とても不思議です。
0630デフォルトの名無しさん
NGNG> 本当に型がないのですね。
変数にはない。オブジェクトが型を持っている。
0631_
NGNG( ・∀・)/< こんなのみつけたっち♪
http://www.hiroyuki.zansu.com/hankaku/jaz03.html
http://hiroyuki.zansu.com/hankaku/jaz10.html
http://www.hiroyuki.zansu.com/hankaku/jaz08.html
http://hiroyuki.zansu.com/hankaku/jaz09.html
http://www.hiroyuki.zansu.com/hankaku/jaz06.html
http://hiroyuki.zansu.com/hankaku/jaz05.html
http://www.hiroyuki.zansu.com/hankaku/jaz01.html
http://hiroyuki.zansu.com/hankaku/jaz02.html
http://www.hiroyuki.zansu.com/hankaku/jaz07.html
http://hiroyuki.zansu.com/hankaku/jaz04.html
0632デフォルトの名無しさん
NGNG開発中のYAML次期バージョンは拡張ライブラリとして実装
されているため、とても速いらしい。
0633( ´w`)
NGNGここの管理人は『2chに行くヤツは全員オタクだ。
2ch用語発言したボケはアク禁』などとほざくゴミだ。
これはひろゆき氏及び全ての2ちゃんねらーに対する侮辱である。
ここに行って2ch用語を連発して頂きたい。
0634デフォルトの名無しさん
NGNG藻前一人でいきがってれば?
0635デフォルトの名無しさん
NGNG藻前
konnnakotobadukaisuruyatuniiwaretakunaiyona.
0636デフォルトの名無しさん
NGNG開発中の次期バージョンの Ruby は拡張ライブラリとして
現在とても速いα実装をしており、とても YAML らしい。
0637デフォルトの名無しさん
NGNG0638デフォルトの名無しさん
NGNG0639638
NGNGclass Array
def shuffle
src, dst = self.dup, []
while not src.empty?
dst << src.delete_at(rand(src.size))
end
dst
end
end
0640デフォルトの名無しさん
NGNGclass Array
def shuffle!
size.downto(2) do |i|
j = rand(i)
self[i], self[j] = self[j], self[i] unless (i -= 1) == j
end
self
end
def shuffle
dup.shuffle!
end
end
0641デフォルトの名無しさん
NGNGdef shuffle!
size.downto(1){|i|
push delete_at(rand(i))
}
self
end
end
0642デフォルトの名無しさん
NGNGそれと、delete_atはそれ以降を全部ずらすから、大きいArrayに対しては効率
が落ちる。
0643デフォルトの名無しさん
NGNGおまけ(実用性はたぶんない)
class Array
def shuffle!
sort!{
rand - 0.5
}
end
end
0644デフォルトの名無しさん
NGNGいや、もちろんなんだかぐちゃぐちゃになりそうだなってのは分かるけど
ちゃんとn!通りの並びの全てが等確率で出るのかどうかよく分からない。
0645デフォルトの名無しさん
NGNG0646デフォルトの名無しさん
NGNGソートのアルゴリズムも知らない中学生ですか?
0647デフォルトの名無しさん
NGNG試してみるとわかると思うが、終わらない。
0648デフォルトの名無しさん
NGNG% ruby -e 'class Array; def shuffle!() sort!{ rand - 0.5 } end end ; a=[0
,1,2,3,4,5,6,7,8,9]; a.shuffle!; p a'
[1, 7, 9, 3, 5, 0, 8, 6, 2, 4]
%
終わるけど?
0649デフォルトの名無しさん
NGNGdef shuffle!(&block)
if block
1.upto(size-1){|i| j = block[i+1] ; self[i],self[j] = self[j],self[i]}
else
1.upto(size-1){|i| j = rand(i+1) ; self[i],self[j] = self[j],self[i]}
end
self
end
end
上の方法だとrand(n)かblock[n]が0,…,n-1を等確率で返すことを仮定すれば
すべての要素が異なるときにそれぞれの順列が等確率になることを証明できるが
他の方法はどう?
0650デフォルトの名無しさん
NGNG中央値はランダムに決定されることは自明だと思うので省略。
残りの要素はランダムに振り分けられるので、左右どちらに行くかは等確率。
これを再帰的に繰り返せば全体も等確率と考えていいんじゃないかな。
ただ、最後はselection sortを使ってるんで、これは等確率じゃないような気がする。
n個の要素から最小値を選び出す場合、最初に比較された要素が選ばれる確率は
2**(1-n)だけど、最後に比較されたものが選ばれる確率は1/2。
おまけ
def tossup
rand(2)*2-1
end
0651デフォルトの名無しさん
NGNGswap(arr[i], arr(rand(length(arr))));
0652デフォルトの名無しさん
NGNGdef hist(n,k)
a, h = 1..n, Hash.new(0)
(a.inject{|i,j|i*j}*k).times{ h[yield(a)]+=1 } ; h
end
n, k = (ARGV[0]||3).to_i, (ARGV[1]||100).to_i
h = hist(n,k){|a|a.sort{rand-0.5}}
h.sort_by{|i,j| [j*10/k,i]}.each{|i| p i}
>>650 スマン、最後はselection sortってどういうこと?
それは抜きにしても左右に振られるのがランダムであることから
等確率であることをいうのは飛躍が大きいと思われ。
0653デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています