トップページ⇒tech
1001コメント311KB

Ruby初學者スレッド Part 9

■ このスレッドは過去ログ倉庫に格納されています
0001紅寶石2006/11/21(火) 08:33:42
まずはマニュアル

マニュアル
http://www.ruby-lang.org/ja/man/
Ruby FAQ
http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
逆引きRuby
http://www.namaraii.com/rubytips/
Ruby リファレンスマニュアルの Windows HTML Help版
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
Rubyリファレンスマニュアル刷新計画
http://doc.loveruby.net/


前スレ
Ruby初心者スレッドPart8
http://pc8.2ch.net/test/read.cgi/tech/1159424939/

>>2-10
0439デフォルトの名無しさん2006/12/15(金) 15:57:44
ruby 1.8.5 (2006-08-25) [i386-mswin32]にアップデートしたのですが、
1.8.4まで正常に動いていたコードの挙動が変わってしまいました。

どうも、-Kuの時の挙動が変わってるようなのですが…。
以下のサンプルは、すべて「サル」とテキストに出力するはずのものですが、
f_utf16.txtは「サ」になってしまいます。
1.8.4にするか、1.8.5でも-Keにすると「サル」になります。

#!/usr/bin/ruby -Ku

require 'iconv'
utf8_to_utf16 = Iconv.new('UTF-16LE', 'UTF-8')

# zenkaku katakana "saru"
utf8str = [0xe3,0x82,0xb5,0xe3,0x83,0xab].pack("C*")
utf16str= utf8_to_utf16.iconv(utf8str)
formated_utf16str = format("%s",utf16str)

open("utf8.txt","wb").write(utf8str)
open("utf16.txt","wb").write(utf16str)
open("f_utf16.txt","wb").write(formated_utf16str)
04404392006/12/15(金) 15:58:50
挙動変更に関するアナウンスが出てたりしますでしょうか。
0441デフォルトの名無しさん2006/12/15(金) 17:20:29
こんにちは。
rubyのhttpライブラリでクッキーの扱いはどうなってるのでしょうか?
ページ上のボタンをクリックしてページを開いていくのですが、どうも
クッキーを処理できてないみたいで、ブラウザでクッキーを拒否したときと
同じページを取得してしまいます… orz
Net::を使って一から書かないとだめなのでしょうか?
0442デフォルトの名無しさん2006/12/15(金) 18:59:37
>>441
一から、というか、普通にヘッダを処理すればいいと思うよ。
0443デフォルトの名無しさん2006/12/15(金) 19:10:21
>>439
単にバグ。[ruby-dev:29952] を参照。
ruby_1_8では直ってる。ruby_1_8_5では直ってない。
0444デフォルトの名無しさん2006/12/15(金) 19:12:46
http.getで取得したbodyを正規表現で処理したいのですが、
どうも漢字をうまく扱うことができません。


#! ruby -Ks や $KCODE =
を使い読んでみましたが一致しません。

ほかに行わなければならない処理があるのでしょうか?
どうぞ宜しくお願いします。
0445デフォルトの名無しさん2006/12/15(金) 19:19:18
bodyを文字コード変換してやって
bodyと正規表現の文字コードを合わせないとダメなんじゃん?
0446デフォルトの名無しさん2006/12/15(金) 19:38:07
なるほど。

正規表現文字列に対しても文字コード変換という発想がありませんでした。
試してみます。
ありがとうございました。
0447デフォルトの名無しさん2006/12/16(土) 15:18:35
Javaだとパッケージで名前空間を分ける文化があるけど
Rubyのmoduleで名前空間分けるってアリなの?
↓みたいな
module Hoge
 module Piyo
  module Foo
   module Bar
    class SampleClass
    end
   end
  end
 end
end
0448デフォルトの名無しさん2006/12/16(土) 15:46:19
複数クラスをまとめることはある。

module M
class A
...
end

class B
...
end

end
0449デフォルトの名無しさん2006/12/16(土) 15:51:59
module Hoge::Piyo::Foo::Bar
 class SampleClass
 end
end
0450デフォルトの名無しさん2006/12/16(土) 16:05:40
>>447
深すぎwww
0451デフォルトの名無しさん2006/12/16(土) 16:58:37
前に、cygwinとmswin32版rubyを混在していると、
cygwinのターミナルで irb が、
 /usr/bin/ruby: no such file to load -- ubygems (LoadError)
と吐いて動かないという話をしました。

これの、原因がわかりました。

mswin32版は、One-Click Ruby Installer for Windowsでインストールしていて、
 RUBYOPT=-rubygems
を設定しているせいでした。

 unset RUBYOPT
で、cygwinのirbが動いてくれました。

bashだと、.bashrcに、
 alias irb='unset RUBYOPT; irb'
と書くと便利です。

そのせつは、お騒がせしました。

0452デフォルトの名無しさん2006/12/16(土) 17:43:52
rubyのエディタとして、RDEを使ってみているのですが、
Ctrl+Backspaceとかで、単語削除はできないのでしょうか?
0453デフォルトの名無しさん2006/12/16(土) 18:03:55
>>452
http://rubyde.sourceforge.net/hiki/ja/Editor.html
ここにある以外はないんじゃない?
0454デフォルトの名無しさん2006/12/16(土) 18:04:51
だめだ・・・
RDE、保存後にアンドゥーもできないし、実用には遠い・・・
0455デフォルトの名無しさん2006/12/16(土) 18:06:40
eclipseのrubyプラグいんつーのもあるね。
eclipseの使い方知らないから使ってないけど。
0456デフォルトの名無しさん2006/12/16(土) 18:12:59
>>454
自分はRDE使ってるけど、使用し続けると、数時間後にリソースエラーとか何とかで固まるのと
保存後にアンドゥーができないのは確かに辛いよね。
HDDにファイルごと履歴残してないんだろうか。
0457デフォルトの名無しさん2006/12/16(土) 18:46:53
自動リファクタリングできるやつない?
0458デフォルトの名無しさん2006/12/16(土) 18:56:42
hoge.map{ |i| result += i }
をもっと短く書きたいのですが、
inject?

>>457
なさそう・・・
0459デフォルトの名無しさん2006/12/16(土) 18:57:23
あ、
hoge.inject{ |i, j| i + j }
か。
0460デフォルトの名無しさん2006/12/16(土) 19:23:16
RDEはツールバーの位置をちゃんと保存してくれれば
使いたいんだけどなー。

そんな漏れはJmEditor。TeraPad以外でシンプルないい
エディタないかな?
0461デフォルトの名無しさん2006/12/16(土) 23:48:51
俺はずっとサクラエディタだが
文字列や正規表現のリテラルに結構困る
それが無ければなー

PeggyPad は文字間の調節が出来なくて
太字の単語が潰れる…
0462デフォルトの名無しさん2006/12/17(日) 00:48:34
>>461
自分も、PHPとかPerlとか他のスクリプトは
全部サクラエディタ使ってる。
単語の補完も出来るし、登録しとけば
パラメータヒントとかも出せるからそれなりに便利だし。
0463デフォルトの名無しさん2006/12/17(日) 12:12:58
初歩的な質問なんですが
ファイルのコピーってどうすればいいんでしょうか
テキスト系なら↓でコピーできるんですが、画像ファイルは途中で途切れてしまいます

def copy(inf,ouf)
  dat = File.open(inf , "r") {|fr| dat = fr.read }
  File.open(ouf , "w" ) {|fw| fw.write dat }
end
0464デフォルトの名無しさん2006/12/17(日) 12:25:10
バイナリモードでオープンすればいい。

def copy(inf,ouf)
  File.open(ouf , "wb") {|fw| fw.write File.open(inf , "rb"){|fr| fr.read } }
end


でも、File.copy(from, to) 使っても同じようなことができるよね。
0465デフォルトの名無しさん2006/12/17(日) 13:15:17
ありがとうございました。
バイナリモードで無事成功しました。

今までFile.copy(from, to)がなぜかエラーだったんで自作してたんですが
さっきrequire 'ftools'が必要な事に気づきました。
0466デフォルトの名無しさん2006/12/17(日) 15:39:38
fileutilsつかえyo。
0467デフォルトの名無しさん2006/12/17(日) 18:14:18
FileUtils.copy_file(from, to)
0468デフォルトの名無しさん2006/12/17(日) 22:18:43
軽いエディタならnotepad++とかどうかな?
0469デフォルトの名無しさん2006/12/18(月) 10:52:12
* Rubyは最強の言語(のひとつ)である
* Rubyユーザは少数派である
* 大衆はRubyを(いろんな理由で)受け入れられない
* 現在、Rubyを受け入れられるのは「選ばれた人々」である
* つまり、彼らはある意味「選民」である
* しかし、選民意識をあまり吹かせると、ますます大衆から受け入れられない
* 結果としてますます選民になる(悪循環の予想)
0470デフォルトの名無しさん2006/12/18(月) 12:00:24
プログラムのひとつもかけないようなやつの戯れ言を聞かされるのはたまったもんじゃないねw
0471デフォルトの名無しさん2006/12/18(月) 12:17:35
>>470
あなたのレスはRubyコミュニティーをみごとに象徴したすばらしいレスです。
0472デフォルトの名無しさん2006/12/18(月) 12:24:22
換言
プログラムを書いたことのない初心者はお断り。
0473デフォルトの名無しさん2006/12/18(月) 12:26:50
べーつにー、ただ書いたこともないくせに偉そうなこというやつはお断り。
偉そうなんだよねえ。
0474デフォルトの名無しさん2006/12/18(月) 12:28:19
どんだけエスパーなんだよ
0475デフォルトの名無しさん2006/12/18(月) 12:30:15
へ。「偉そう」って評したのがエスパーなの?
なんで?
0476デフォルトの名無しさん2006/12/18(月) 12:32:56
キチガイ来た
0477デフォルトの名無しさん2006/12/18(月) 12:45:55
まぁプログラミングの勉強をもうちょっと頑張ろうよとw
0478デフォルトの名無しさん2006/12/18(月) 12:46:55
* 現在、Rubyを受け入れられるのは「選ばれた人々」である
* つまり、彼らはある意味「選民」である
* しかし、選民意識をあまり吹かせると、ますます大衆から受け入れられない
* 結果としてますます選民になる(悪循環の予想)
0479デフォルトの名無しさん2006/12/18(月) 12:49:24
今は開発陣がRuby使ってないのが問題だから
0480デフォルトの名無しさん2006/12/18(月) 12:49:25
確かに初めてのプログラミングでRubyをやるっていうのは
向いていないような気がする。
むしろRubyには、プログラミングの概念くらいは理解しているな?的な
良くも悪くもUnix思想を受けているんじゃないかな。
0481デフォルトの名無しさん2006/12/18(月) 12:57:38
換言
Windowsしか使ったことのない初心者はお断り。
0482デフォルトの名無しさん2006/12/18(月) 13:05:00
perl++
0483デフォルトの名無しさん2006/12/18(月) 13:30:41
* プログラマは(コンピュータを使う場合は)最強の職業(のひとつ)である
* プログラマは少数派である
* 大衆はプログラミングを(いろんな理由で)受け入れられない
* 現在、プログラミングを受け入れられるのは「選ばれた人々」である
* つまり、彼らはある意味「選民」である
* しかし、選民意識をあまり吹かせると、ますます大衆から受け入れられない
* 結果としてますます選民になる(悪循環の予想)

スレ違いゴメス。
0484デフォルトの名無しさん2006/12/18(月) 14:55:03
本スレ荒れたからこっちに住み着いたのに…。
勘弁してもらえないだろうか
0485デフォルトの名無しさん2006/12/18(月) 15:16:59
サクラエディタ使いだったが色々使ってみた。
JmEditor は良さ気だな。乗り換えようか。
Notepad++ は色分けの自由度が低いし
何より改行とタブの記号が自己主張しすぎてて嫌だw
0486デフォルトの名無しさん2006/12/18(月) 15:30:28
>>484
御大自ら次々にネタを投下してる言語なんだから仕方ないだろ。
修行だ、信仰心が問われているんだと思って我慢しろ。
0487デフォルトの名無しさん2006/12/18(月) 16:56:58
Jm使ってると書いた香具師だけど、俺はNotepad++にしようと
思ってる。ランチャー機能付いてるし、設定も簡単でイイ!

勘違いかもしれないけど、改行マークは最初から色ついてなかった
ような。とりあえずタブ記号は、スタイル設定ダイアログのGloba Styles
->Indent guidelinestyleで両方の色をデフォルトの背景色にすれば
消えるよ。

Notepad++教えてくれた人アリガトン。
0488デフォルトの名無しさん2006/12/18(月) 17:07:48
そんじゃあ、SciTE はどう?
04894872006/12/18(月) 17:21:17
Notepad++のタブ記号表示の設定方法は間違いだったスマソ。

改行とタブの表示の有無は表示メニューから切り替えるだけでOK。
04904852006/12/18(月) 17:50:57
>487
違う違う。
俺は改行記号とタブ記号は表示されないと嫌なの。
でも、あくまで主役はコードであって欲しいから
目立つ改行・タブの記号は嫌なのさ。
極限まで薄い色にしたら一応見れた。…今度は見辛いが。

…これ設定ムズいな〜。
黒基調の設定がデフォで入ってるPeggyは楽だったんだが。

SciTEは…暇なときに設定やるかw
0491デフォルトの名無しさん2006/12/18(月) 19:10:09
>>490
> >487
> 違う違う。
> 俺は改行記号とタブ記号は表示されないと嫌なの。

失礼。そうだったのか。

> でも、あくまで主役はコードであって欲しいから
> 目立つ改行・タブの記号は嫌なのさ。

改行は特にすごいね(笑)

> 黒基調の設定がデフォで入ってるPeggyは楽だったんだが。

自分も黒バックが好みなのでその意味ではめんどいかな。

ちなみにJmでいまいち気に入らなかったのは、関連づけなどから
起動したときにタスクバーアイコンがアクティブにならないとこ。
0492デフォルトの名無しさん2006/12/18(月) 20:35:17
PSPadはどう?
0493デフォルトの名無しさん2006/12/18(月) 21:16:49
なぜemacsを使わない
0494デフォルトの名無しさん2006/12/18(月) 21:22:05
初心者スレだから
0495デフォルトの名無しさん2006/12/18(月) 22:33:55
xyzzyの事も忘れないでください。
ruby-modeも黒基調もあるよ。
0496デフォルトの名無しさん2006/12/18(月) 22:41:04
>>495
xyzzyのruby-mode最低限の機能でよいのだが、
インデントが一定規則で、誤爆する
0497デフォルトの名無しさん2006/12/18(月) 22:49:57
初心者だからemacsを使わない。それで世の中が渡っていけると思ってるのか!
0498デフォルトの名無しさん2006/12/18(月) 22:50:35
渡っている人は大勢います。
私はEmacs使っていますけどね。
0499デフォルトの名無しさん2006/12/18(月) 22:53:50
xyzzyのruby-modeはインデント奇妙だよね
0500デフォルトの名無しさん2006/12/18(月) 22:57:33
インデントについてごちゃごちゃ言うならPythonへ行けよ。
0501デフォルトの名無しさん2006/12/19(火) 00:44:28
vivivivivi―――――――!!!!
0502デフォルトの名無しさん2006/12/19(火) 10:09:23
当り前だろ。何のためにendがあると思ってるんだ?
0503デフォルトの名無しさん2006/12/19(火) 13:25:53
ruby1.8.0と標準添付のwebrickを使って
ttp://rubyist.g.hatena.ne.jp/muscovyduck/20061114/p1
に書いてあるCGI実行サンプルを動かしてみると、常に「dump error」が出ます。
(ruby最新版を使うとエラーは出ませんでした)
webrick/httpservlet/cgi_runner.rb の Marshal.restore(dump) 周りに
問題があるようなのですが……

これって何故なんでしょうか?
1.8.0ではwebrickを使わないほうが良いのでしょうか?
0504デフォルトの名無しさん2006/12/19(火) 14:12:53
1.8.0を使わない方がいい、という結論の方をお勧めする。
0505デフォルトの名無しさん2006/12/19(火) 15:23:03
ばかにしてる!
0506デフォルトの名無しさん2006/12/19(火) 16:57:37
Rubyで
オブジェクト(Classクラスのオブジェクトも、クラスのオブジェクトも含めて)
が持ってるのは、
インスタンス変数と、インスタンスメソッドだけだと思ってたけど、
次の見て、ローカル変数も保持してるのって、わけわかめになってきた。

class Hoge
local = 1
define_method(:foo) do
p local += 1
end
define_method(:bar) do
p local += 1
end
local = 10
end
hoge = Hoge.new
p hoge.foo
p hoge.bar
(つづく)
05075062006/12/19(火) 17:01:04
(つづき)

どうやら、ローカル変数のスコープの問題が関与しているようだけど、
ローカル変数は、静的にスコープが決まるとかいって、U゚Д゚U ハァ?
って感じだったので、
静的ってのを調べたら、静的って言うのは、コンパイル時に決まるらしく、
今まで、コンパイルと実行を区別してなかった、私にとっては、
理解を超越してしまってる。
↓ここが、それに関する説明っぽいけど、
http://www.ruby-lang.org/ja/man/?cmd=view;name=%BC%C2%B9%D4
スコープなんて言葉は一言もでてこないし、
ブロックって言う言葉も、普通の{}のブロックとは違うようだし、
意味不明です。

この理解は、RHGとか読んで、ソースコード読んで理解しなさいということなんでしょうか。
正直、初心者の私には、付いていけません。
eval系メソッドを使うなってことなんでしょうか。。


1.コンパイル=>実行までの流れがわかる、
2.あと、オブジェクトがどういう値を保持していて、どこからアクセス可能か
ということについて、いい本とか、サイトないでしょうか。

教えてください。お願いします
0508デフォルトの名無しさん2006/12/19(火) 17:25:45
>>507
>↓ここが、それに関する説明っぽいけど、
ここのことかな?
http://www.ruby-lang.org/ja/man/?cmd=view;name=%BC%C2%B9%D4#a.a5.ed.a1.bc.a5.ab.a5.eb.ca.d1.bf.f4

正直、このページ全体が酷い出来だな。
むしろこっちを読むべきじゃないかな。
http://www.ruby-lang.org/ja/man/?cmd=view;name=%CA%D1%BF%F4%A4%C8%C4%EA%BF%F4#a.a5.ed.a1.bc.a5.ab.a5.eb.ca.d1.bf.f4

これでわからなかったら、また聞いてくれ。
0509デフォルトの名無しさん2006/12/19(火) 19:41:38
たしかにxyzzyのruby-modeはあんまりいけてないな。なんとかしてほしい。
>>500
xyzzyのruby-modeにおけるインデントがおかしいといってるだけであって、
ruby自体は何も非難していない。
被害妄想乙。
0510デフォルトの名無しさん2006/12/19(火) 20:09:49
>>509
じゃあスレ違いだ。xyzzyのスレに行ってやれ。
0511デフォルトの名無しさん2006/12/19(火) 23:14:41
>>506-507
まずクロージャ(closure)について勉強しろ。
理解できるまでは無理してdefine_method使うな。
0512デフォルトの名無しさん2006/12/20(水) 10:39:42
すみません。説明を放棄して使う奴の実力が足りないんだってことにしておきます。
0513デフォルトの名無しさん2006/12/20(水) 11:21:47
学習に必要なキーワードを提示してる人間を何故煽る
closureについてわからない所があれば、そこでまた質問すればいいんだ
そんなにスレを荒らそうとしないでくれ
0514デフォルトの名無しさん2006/12/20(水) 11:22:49
うぜ
0515デフォルトの名無しさん2006/12/20(水) 11:43:40
君たちが回答者という立場を満喫するべく質問を欲しそうにしていたから
質問をしてあげたんだ。
君たちは謝辞を述べてから、競い合うように簡潔にして丁寧な解説を
披露しあうべきではないのかね?
0516デフォルトの名無しさん2006/12/20(水) 12:20:38
簡潔で分かりやすい解説は、その人自身の習熟度の指標でもある。
0517デフォルトの名無しさん2006/12/20(水) 15:45:21
簡潔でわかりやすい質問は、その人自身の成長性の指標でもある。
うまく質問ができない人は、必要な回答を得られないので、成長性が低くなる。

よい回答が習熟殿の指標足りうるのは、よい質問があってこそ。
テストの問題と一緒だな。
0518デフォルトの名無しさん2006/12/20(水) 15:56:07
>>517
> うまく質問ができない人は、必要な回答を得られないので、
回答できない言い訳はどうでもいい。
ただ良い回答があればそれでいい。
0519デフォルトの名無しさん2006/12/20(水) 16:10:32
勉強になります!
0520デフォルトの名無しさん2006/12/20(水) 16:18:54
エスパーできる人は、そのことについて熟知している証拠である。
0521デフォルトの名無しさん2006/12/20(水) 16:54:41
ぼくも520さんみたいなエスパーに早くなれるよう
修行とお布施、がんばります!!
0522デフォルトの名無しさん2006/12/20(水) 23:01:50
>>509
xyzzyなら、ruby-mode.lを直接改造して、*ruby-block-beg-re*とかを改造するといいよ。
;(defvar *ruby-block-beg-re*
; "class¥¥|module¥¥|def¥¥|if¥¥|unless¥¥|case¥¥|while¥¥|until¥¥|for¥¥|begin¥¥|do")
(setq *ruby-block-beg-re*
"¥¥<¥¥(class¥¥|module¥¥|def¥¥|if¥¥|unless¥¥|case¥¥|while¥¥|until¥¥|for¥¥|begin¥¥|do¥¥)¥¥>")
とか。ちょっとはましになる。
0523506,5072006/12/20(水) 23:12:33

>>512は私ではありません。
気をわるくしないでください
2chにつながりにくくなって、返事がおそくなりました。m(__)m
お騒がせしてすみませんでした。

みなさん、ありがとうございます。
まずは、クロージャについて勉強しようと思います。

ちょっと、ネットで調べたところ、
自分が知りたい概念と同じような気がします。
0524デフォルトの名無しさん2006/12/21(木) 00:06:43
mswin32だとスレッドが使えないと聞いたのですが

Thread.fork {
while true
puts 'forked thread'
end
}
while true
puts 'main thread'
end

このコードは正しく動いている気がします
いつの間にか使えるようになったのでしょうか?
0525デフォルトの名無しさん2006/12/21(木) 00:31:04
fork違い
0526デフォルトの名無しさん2006/12/21(木) 01:04:48
forkがないってのと、console I/Oすると他のThreadも止まるってのを、
ごっちゃにしてるんじゃなかろうか。
0527デフォルトの名無しさん2006/12/21(木) 01:45:33
うん。ユーザースレッドだからmswin32だろうがスレッドは使えるよね。
0528デフォルトの名無しさん2006/12/21(木) 02:06:38
結局何が使えないんですか?
0529デフォルトの名無しさん2006/12/21(木) 06:31:22
Matz
0530デフォルトの名無しさん2006/12/21(木) 07:16:14
いるいるこういうやつ(笑)
0531デフォルトの名無しさん2006/12/21(木) 07:21:02
(笑)
0532デフォルトの名無しさん2006/12/21(木) 07:29:32
ユーザースレッドってのは、コルーチン?みたいなのかな?
OSのネイティブスレッドではない?

>>529-531
ワロタ。
でも本スレの流れを持ち込むのはやめてくれw
0533デフォルトの名無しさん2006/12/21(木) 07:33:52
>>532
そう、OSのネイティブスレッドではありません。
インタプリタががんばって処理します。
長所は移植性がとても高いこと。
短所はOSの支援を受けられないので、
たとえばSMPの恩恵を受けられないことです。
0534デフォルトの名無しさん2006/12/21(木) 20:02:20
リファレンス眺めてて気づいたのですが
while hoge..fuga
 foo
end
この記法、どういうときに使うのでしょう?
0535デフォルトの名無しさん2006/12/21(木) 21:02:05
>>534
while foo in hoge..fuga
  p foo
end

の間違いじゃ?
それだと無限ループしちゃうyo
0536デフォルトの名無しさん2006/12/21(木) 21:03:20
ごめん間違えた

for foo in hoge..fuga
  p foo
end

0537デフォルトの名無しさん2006/12/21(木) 22:15:42
ドットに複数の意味をもたせた言語デザインが悪い

とか逆切れしてみるのはどうか
0538デフォルトの名無しさん2006/12/21(木) 23:21:37
>>535
if (a==b)..(c == d)
end
みたいなのもあるんだよ。
ただ、可読性が結構低いのでお勧めは出来ないけど。

while hoge..fugaの形では使ったことはないけど
array.each do |e|
 next unless (e == hoge)..(e == fuga)
 ......
end
みたいな形では極稀に使う。
■ このスレッドは過去ログ倉庫に格納されています