もう18時か、
2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50 [PR]無料のブラウザで出来るゲーム集[PR]  

Ruby 初心者スレッド Part 32

1 :デフォルトの名無しさん:2009/10/24(土) 06:18:12
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

★注意★ Ruby 1.9.1 は初心者にはまだ時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
   (理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に完全対応していないためです。)
 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 を習得すれば将来スムーズに 1.9 系に移行できるでしょう。

関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・モジュール名やエラーメッセージでググる
 ・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
 ・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(自力で訳さずなるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

667 :デフォルトの名無しさん:2009/11/23(月) 09:23:26
こんなのも見つけた
ttp://slashdot.jp/~YamaKenZ/journal/312265

[3,7] → 3..7
(3,7] → 3!..7
[3,7) → 3..!7
(3,7) → 3!..!7

668 :デフォルトの名無しさん:2009/11/23(月) 09:34:48
>>667
これいいね。rubyでも採用してほしい


669 :デフォルトの名無しさん:2009/11/23(月) 11:13:16
>>668
先生!配列の [3, 7] と 閉区間の [3, 7] の区別がよくわかりません!

670 :デフォルトの名無しさん:2009/11/23(月) 11:15:10
対応表をよく見て見ろ

671 :デフォルトの名無しさん:2009/11/23(月) 11:19:40
Range.newでいいじゃん

というかフツーは数字のほうをいじって2ドットで書けるように使うと思う
3ドットはあまり見ない

672 :デフォルトの名無しさん:2009/11/23(月) 11:19:41
ここまでこれ以上妙な記法増やすなヴォケというレス無し

673 :デフォルトの名無しさん:2009/11/23(月) 11:24:53
これ以上記号ふやすのヤメレ

674 :デフォルトの名無しさん:2009/11/23(月) 11:59:33
=!=
とか
===
とか
使ってるのはPHPだっけ?

675 :デフォルトの名無しさん:2009/11/23(月) 12:02:47
>>671
ほんとは記号のほうをいじるべきなんだけどね
さすがに紛らわしい

676 :デフォルトの名無しさん:2009/11/23(月) 12:24:28
そこでAPLですよ

677 :デフォルトの名無しさん:2009/11/23(月) 13:33:22
>>674
=!=じゃなくて!==な
暗黙の型変換をしないで厳密に比較する演算子

678 :デフォルトの名無しさん:2009/11/23(月) 13:36:54
CGIやその他から受け取った入力を同じ形式でファイルにダンプ(Marshal使用)し、
後で取り出すプログラムを書いています。
取得時にはダックタイピングで区別なく保存データを作成していますが、
別のタイミングで復元しようとすると、CGIからの入力に関してCGIモジュールの依存が残っていて(?)
"CGIモジュールがない"とエラーになってしまいます。
保存時にto_sなどを加えてみたのですが、変わりません。

純粋に文字列だけを取り出し、CGIオブジェクトの依存を切るにはどうしたらいいのでしょうか?
Ruby1.8.7です。

679 :デフォルトの名無しさん:2009/11/23(月) 14:16:02
>>678
・ Marshal.load する前に、復元後のオブジェクトが存在するために必要なクラスを含む全モジュールを require しておく
・ 必要なデータだけを適当なキーの Hash オブジェクトにでもまとめ、その Hash だけをまーしゃるする

後者推奨

680 :デフォルトの名無しさん:2009/11/23(月) 14:27:44
>>678
まず第一に、今あえて古い cgi.rb を使うのはおすすめしない
webrick/cgi や Rack に切り替えた方がいいと思う

で、純粋な文字列を取り出す方法としては、次の手がある

pure_str = String.new(cgi['key1'])

>>679
それだと結局、CGIの依存は切れないんじゃ?

681 :678:2009/11/23(月) 15:13:19
>>679-680
ありがとうございます。
実は>>679で挙げていただいた後者の方法をとっていました。
>>680に挙げていただいたStringを新たに生成する方法で解決できました。

webrick/cgi、Rackともノーチェックでしたので、これから確認してみようと思います。
ありがとうございました!

682 :デフォルトの名無しさん:2009/11/23(月) 19:05:33
コマンドプロンプトでtest-specをインストールしようとしたら下記のようなエラーが出ます
二日間何回か試してるのですがインストールできません
403エラーではないのでしょうか・・・
C:\Documents and Settings\Owner>gem install test-spec
ERROR: While executing gem ... (Gem::RemoteSourceException)
HTTP Response 403


683 :デフォルトの名無しさん:2009/11/23(月) 19:11:13
gem install --verbose でやってみて。



684 :デフォルトの名無しさん:2009/11/23(月) 19:15:23
やってみます!

685 :デフォルトの名無しさん:2009/11/23(月) 19:17:50
こういうの見るとやってから書き込めよといつも思う

686 :デフォルトの名無しさん:2009/11/23(月) 19:32:04
>>685
--verboseつけたら解決するかも! とか初心者に分かるわけねーだろ

687 :デフォルトの名無しさん:2009/11/23(月) 19:38:33
解決というより、状況がより詳しく分かる、ってだけだがな。


688 :デフォルトの名無しさん:2009/11/23(月) 19:42:19
>>686
違う

689 :デフォルトの名無しさん:2009/11/23(月) 19:47:43
>>686
やってみますのレスはいらないってことでしょ

690 :デフォルトの名無しさん:2009/11/23(月) 19:50:34
まったく返事がなかったらなかったで
回答者は不安に思うかもしれないから多少の合理性はある
だいいちたった一行のレスにそんなに目くじらたてることでもないでしょ

691 :デフォルトの名無しさん:2009/11/23(月) 19:52:35
ねえよ
どんだけ秒速の世界に生きてんだよ

692 :デフォルトの名無しさん:2009/11/23(月) 20:10:02
2ちゃんをチャットと勘違いしてるアホなんだろ

693 :デフォルトの名無しさん:2009/11/23(月) 20:11:47
691は余裕のない世界に生きてる人なんですね

694 :デフォルトの名無しさん:2009/11/23(月) 20:56:49
フグ毒って怖いんだね

695 :デフォルトの名無しさん:2009/11/23(月) 23:51:59
当方Windowsで開発をしています
ruby script/serverを実行した際に

C:\rails\hello>ruby script/server
=> Booting Mongrel
=> Rails 2.3.4 application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server

でコマンドプロンプトが停止したまま動かなくなります
Ctrl-Cをしてもサーバーは停止できません
一度だけこの状態で長時間放置したときに
500 Internal Server Error
unknown error
という表示がされました

解決方法がさっぱりわかりません
どなたか知っている方がいれば教えていただけるとありがたいです

696 :デフォルトの名無しさん:2009/11/23(月) 23:58:13
>>690
それって要するに書いても書かなくても同じくらい不快を与えかねないってことだから、
最適化する意味で、やっぱり書かないのがベターだな。

697 :デフォルトの名無しさん:2009/11/24(火) 00:09:53
>>695
Railsはスレ違い
あとコマンドプロンプトが「何も入力できない」状態になるのはそりゃ当たり前なんじゃね

698 :デフォルトの名無しさん:2009/11/24(火) 00:43:48
まるち

699 :デフォルトの名無しさん:2009/11/24(火) 06:11:49
マルチ氏ねはともかくCtrl+Breakで止まるといいね

700 :デフォルトの名無しさん:2009/11/24(火) 14:58:06
acceptに入っちゃうとCtrl+Cで止まらないんだよねぇ・・・

701 :デフォルトの名無しさん:2009/11/24(火) 15:01:13
関数を後から呼び出せるクラスをつくりたいのですが、
引数がある場合にどう書けばいいのか分かりません。
できればリファレンスなども教えてください。
よろしくおねがいします。

#######################
def f(x)
puts x
end

class Foo
def initialize(h)
@h=h
end
def bar(x)
@h(x)
end
end

foo = Foo.new(f)
foo.bar(7)

702 :デフォルトの名無しさん:2009/11/24(火) 15:01:26
>>695
要するに正常位

703 :デフォルトの名無しさん:2009/11/24(火) 15:11:07
>>701
それなんて Proc ?

def f(x)
puts x
end

foo = Proc.new {|arg| f(arg) }
# 百年後
foo.call('Hello!')


704 :デフォルトの名無しさん:2009/11/24(火) 15:31:52
Procのことよく分かってないのでアレですが、
もうちょっと込み入ったことがやりたかったようなので、
やっぱりクラスは定義したいのですが・・・。

数学で言うと、f(x)を元手にして
nにかんする関数の族
{lambda {|x| n*f(x)}_n
を作りたいわけです。

##############################
def f(x)
x
end

class Foo
def initialize(g)
@g = g
end
def bar(c)
lambda {|x| c*@g(x)}
end
end

foo = Foo.new(f).bar(2)
foo.call(7)

=begin
# It Works!
foo = lambda {|x| 2*f(x)}
p foo.call(7)
=end

705 :デフォルトの名無しさん:2009/11/24(火) 15:36:36
>>704
def f
Proc.new{|x|x}
end

class Foo
def initialize(g)
@g = g
end
def bar(c)
lambda {|x| c*@g.call(x)}
end
end

foo = Foo.new(f).bar(2)
foo.call(7)

こういう事ではなくて?

706 :デフォルトの名無しさん:2009/11/24(火) 15:48:47
>>703
すばやい回答ありがとうございます。

>>705
これでほとんどできてますが、
f(x)の中身がややこしいので、そこはそのままいきたい。
def f(x) p x end
のままで、Foo.new(f.to_proc).bar(2)
で渡そうとしたのですが、引数の数が違うと怒られます。
う〜む・・・。

707 :デフォルトの名無しさん:2009/11/24(火) 15:49:47
class Foo
def initialize(&block_arg)
@g = block_arg
end
def bar(c)
lambda {|x| c*@g.call(x)}
end
end

def f(x)
x
end

foo = Foo.new(&method(:f)).bar(2)
foo.call(7)

foo = Foo.new{|x| x }.bar(2)
foo.call(7)


708 :デフォルトの名無しさん:2009/11/24(火) 15:50:37
あぁ、そうか、fはProcを返さないといけないのか・・・。
簡単に書けないのかなぁ・・・。

709 :デフォルトの名無しさん:2009/11/24(火) 15:51:46
ミスった、ブロック呼び出しをサポートはこういう目的
foo = Foo.new{|x| f(x) }.bar(2)

710 :デフォルトの名無しさん:2009/11/24(火) 15:52:07
コンビネータとかカリー化とか出てきそうな予感


711 :デフォルトの名無しさん:2009/11/24(火) 15:59:59
>>707
視認で変更したら通らないので、コピペしたら
methodにわたすfの前にコロンがついていました。
アンドとコロンの意味は不勉強につき分かっていませんが、
これで完全に解決です。
ありがとうございました。

712 :デフォルトの名無しさん:2009/11/24(火) 16:03:45
>>709
おぉっ!
綺麗にかけますね。

ちなみに私はC++のヘビーユーザーですが、
Rubyの簡潔さに浮気しています。

713 :デフォルトの名無しさん:2009/11/24(火) 16:26:36
一応フィードバック:

methodの引数にはSymbolを渡せばいいらしい。
ttp://tinyurl.com/y8avpyg

アンド記号とかアスタリスク記号の説明は
マニュアルの「メソッド定義」のところにある。
ttp://tinyurl.com/ylzu859

みなさん、ありがとうございました。

714 :デフォルトの名無しさん:2009/11/24(火) 18:12:52
ルヴィーの素晴らしさを教えてください。
僕は開発者が日本人なのが誇らしくて使っていますが、
皆さんはどうでしょうか。

715 :デフォルトの名無しさん:2009/11/24(火) 18:13:30
Rubyの標準クラスライブラリは重武装で便利だけど
バイナリとして配布しようとするとだいぶ冗長になってしまう・・・
標準クラスライブラリがもうちょっと細分化されたビルドって無いですかね?

プラットフォームはWin32です

716 :デフォルトの名無しさん:2009/11/24(火) 18:24:19
LLVMを使って自作の実装を作るんだ!

186 KB [ 2ちゃんねる 3億PV/日をささえる レンタルサーバー \877/2TB/100Mbps]

■ おすすめ2ちゃんねる 開発中。。。 by FOX ★
このスレを見ている人はこんなスレも見ています。(ver 0.20)
AzPainter/AzDrawing Part4 [CG]
coLinux野郎ぜ! Part7 [Linux]
坂本真綾vol.139 [声優個人]
【MMD】MikuMikuDance動画制作/鑑賞スレ【初音ミク】 part43 [YouTube]

新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :


read.cgi ver 05.0.7.8 2008/11/13 アクチョン仮面 ★
FOX ★ DSO(Dynamic Shared Object)