Ruby初心者スレッド Part 12 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
07/05/03 13:47:30
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
関連スレやURLは2以降。Ruby on Railsの質問はWebProg板のRailsスレで。

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

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


宗教的な話題は禁止します。

2:デフォルトの名無しさん
07/05/03 13:53:28
# 本スレ
Rubyについて Part 26
スレリンク(tech板)

# 関連スレ
【Ruby】Ruby on Rails Part3
スレリンク(php板)

【ActiveScript】RubyをWindowsで使うスレ【GUI】
スレリンク(tech板)

RUBYの宿題教えてください。
スレリンク(tech板)

Rubyは難しすぎ
スレリンク(tech板)

【最高言語】 Rubyist Magazine創刊 【ルビま!】
スレリンク(tech板)

Python厨とRuby厨が仲直りするスレッド
スレリンク(tech板)

Jython、Groovy、JRuby - どれが一番効率的?
スレリンク(tech板)

ムカツクRubyピッケル本をイラツキながらも読んでみるスレ
スレリンク(tech板)

Ruby>>>>>Java
スレリンク(tech板)


3:デフォルトの名無しさん
07/05/03 14:00:10
#過去ログ
Ruby初心者スレッド Part 11
スレリンク(tech板)
Ruby初心者スレッド Part 10
スレリンク(tech板)
URLリンク(makimo.to)
Ruby初學者スレッド Part 9
スレリンク(tech板)
URLリンク(makimo.to)
Ruby初心者スレッドPart8
スレリンク(tech板)
URLリンク(makimo.to)
Ruby初心者スレッドPart7
スレリンク(tech板)
URLリンク(makimo.to)
Ruby初心者スレッドPart6
スレリンク(tech板)
URLリンク(makimo.to)


4:デフォルトの名無しさん
07/05/03 14:00:30
Ruby初心者スレッドPart5
スレリンク(tech板)
URLリンク(makimo.to)
Ruby初心者スレッドPart4
スレリンク(tech板)
URLリンク(makimo.to)
Ruby初心者質問スレPart3
スレリンク(tech板)
URLリンク(makimo.to)
Ruby初心者質問スレPart2
スレリンク(tech板)
URLリンク(makimo.to)
Ruby初心者質問スレPart1
スレリンク(tech板)


5:デフォルトの名無しさん
07/05/03 14:01:34
= 公式/非公式関連リンク

== Rubyを知る
Ruby Home Page
URLリンク(www.ruby-lang.org)

== Ruby使用時の調べもの
Rubyリファレンス
URLリンク(www.ruby-lang.org)
URLリンク(www.ruby-doc.org) (英語)
リファレンスのHTMLヘルプ版配布
URLリンク(elbereth-hp.hp.infoseek.co.jp)
# Windowsで便利
Ruby FAQ
URLリンク(ruby-lang.org)

Programming Ruby - The Pragmatic Programmer's Guide
URLリンク(www.ruby-doc.org)
# 好評書籍をWebで公開中、ただし英語
逆引きRuby
URLリンク(www.namaraii.com)


6:デフォルトの名無しさん
07/05/03 14:03:29
== Ruby使用時の探し物
RAA - Ruby Application Archive
URLリンク(raa.ruby-lang.org)
RubyForge
URLリンク(www.rubyforge.org)
# 共にRubyのアプリやライブラリが検索できる

== Ruby関連のニュースや読み物
日本Rubyの会 公式Wiki - 日本Rubyの会Wiki
URLリンク(jp.rubyist.net)

Rubyist Magazine - るびま
URLリンク(jp.rubyist.net)
# コードレビューが好評

== いろいろRubyサイト
Matzにっき … Ruby作者の日記
URLリンク(www.rubyist.net)〜matz/

Ruby hotlinks 五月雨版 … Ruby関連の日記やblog
URLリンク(www.rubyist.net)〜kazu/samidare/
Rubyの本一覧
URLリンク(www.ruby-lang.org)
<rubyXML/>
URLリンク(www.rubyxml.com)
Ruby Weekly News @ Ruby Garden
URLリンク(www.rubygarden.org)


7:デフォルトの名無しさん
07/05/03 14:04:48
宗教の話はマ板のスレへどうぞ。

【カルト】Ruby開発者Matz【モルモン】
スレリンク(prog板)


8:デフォルトの名無しさん
07/05/03 15:01:39
Rubyを使って脱獄するコードを教えてください。
当方初心者(♀)なのでやさしくお願いします。

9:デフォルトの名無しさん
07/05/03 15:36:24
def prison ->(){break} end

10:デフォルトの名無しさん
07/05/03 17:48:45
前スレ>>999
>>991には最後にselfって書いてあるからクラスが返ってる。
他の式を最後に書けば違うものが返るぞ。


11:デフォルトの名無しさん
07/05/03 17:58:36
つまり

class A
 p 'foo'
 p 'bar'
end

で "foo" と "bar" が表示されるという事なんだが、
何だかなあとは思うな。

12:デフォルトの名無しさん
07/05/03 18:05:29
俺は違和感感じないが、慣れただけなのかなぁ。

13:デフォルトの名無しさん
07/05/03 18:20:05
>>10
だからそれで充分だろ。

14:デフォルトの名無しさん
07/05/03 18:29:08
self と書かないと返らないのと
書かなくても返るのとでは大違い

15:デフォルトの名無しさん
07/05/03 18:56:08
で、実際にそこら辺の仕様を活用したコードって実在するの?

16:デフォルトの名無しさん
07/05/03 19:43:32
>>11
すげー不自然

17:デフォルトの名無しさん
07/05/03 19:46:35
>>11
囚人に抜け道教えちゃ遺憾だろ

18:デフォルトの名無しさん
07/05/03 19:54:16
attr_* とかは基本的には同じようなものなんだけどなぁ。
class A
attr_accessor :a
end


19:デフォルトの名無しさん
07/05/03 20:02:19
定数の定義くらいならやるけども。

20:デフォルトの名無しさん
07/05/03 21:23:50
>>14
self と書けば self を返せるのと
他のものを書いても self しか返せないのとでは大違い

とでも答えておけば満足?


21:デフォルトの名無しさん
07/05/03 21:30:23
>>20
それが大違いだから >>999 は意味が分かんない

22:デフォルトの名無しさん
07/05/04 01:48:58
RoRで作って、問題なく動くものが出来たら、それをjavaのコードで吐くってアプリケーションが有れば最強な気がする。
RubytoJavaコンパイラって感じか?

23:デフォルトの名無しさん
07/05/04 01:55:50
>>1

24:デフォルトの名無しさん
07/05/04 09:22:55
>>22
JRuby

25:デフォルトの名無しさん
07/05/04 15:09:01
.to_s.to_iってださくね?

26:デフォルトの名無しさん
07/05/04 15:24:05
>>25
.2s.2i よりマシ

27:デフォルトの名無しさん
07/05/04 15:30:08
直接to_iを定義すりゃええやん

28:デフォルトの名無しさん
07/05/04 16:19:29
>>26
>.2s.2i

なにその言語。

29:デフォルトの名無しさん
07/05/04 16:45:23
>>28
俺も嫌いだし、いまはもう廃れた習慣でせいせいしてるけど、
昔は to を 2 と表記する習慣がこの世界にはあった。

30:デフォルトの名無しさん
07/05/04 16:55:11
昔の俺のPascalのライブラリとか見ると、int2strとか余裕である。
時代を感じさせる

31:デフォルトの名無しさん
07/05/04 16:58:50
変換系のコマンドラインツールには山ほどあるぞ

32:デフォルトの名無しさん
07/05/04 17:00:12
f2c とか。
ごく普通な表記だと思ってるけど。

33:デフォルトの名無しさん
07/05/04 17:52:33
真ん中に2がはさまってるのは山ほどあるけど、2から始まるのは見たことないな

34:デフォルトの名無しさん
07/05/04 18:05:29
後ろにつくplain2というのならあるな。

plain2 -tex とか plain2 -htmlとかオプションを付けて起動して
プレインテキストから指定フォーマットに変換。


35:デフォルトの名無しさん
07/05/04 18:08:23
int_to_strよりはint2strのほうがいいかとも思うけど、
to_iを2iはないだろ

36:デフォルトの名無しさん
07/05/04 18:11:08
識別子が数字で始まるのは無理だよなあ。

37:デフォルトの名無しさん
07/05/04 18:14:27
案外「数字から始まることが許されるなら本当は2iや2sにしたかった」とか言われたりして

2や4はもう習慣的なもんだな
_to_や_for_とどっちがいいかと言われるとちょっとだけ悩む

38:デフォルトの名無しさん
07/05/04 18:22:43
外人とチャットで c u l8er とか、最初は何の文字化けかと思ったな。


39:デフォルトの名無しさん
07/05/04 18:25:14
日本語で

ノシ

とだけ書かれるのも似たようなもんだけどな

40:デフォルトの名無しさん
07/05/04 18:56:22
l8erって初めて見た。理解するのに10秒ぐらいかかったよ。
普通にタイプしたほうが楽そうだ。

41:デフォルトの名無しさん
07/05/04 20:41:48
googleの検索結果を毎日監視するのに、open-uriを
使おうと思います。というか、実際使ってみました。
↓「あ」の検索結果
url = "URLリンク(www.google.co.jp)
open(url) { |f|
 f.each_line { |line|
  print "#{line}\n"
 }
}

これってブラウザから「あ」で検索した結果とおなじなんだけど、
なんというか、思ったよりあっさりできてしまって焦ってます。
なんなのこれ

42:デフォルトの名無しさん
07/05/04 20:52:12
url = "URLリンク(www.google.co.jp)

これでよくね?

43:デフォルトの名無しさん
07/05/04 21:04:05
>>41
open-uriは楽ですよね

44:デフォルトの名無しさん
07/05/04 21:17:42
便乗だけど検索ワードに”エロエロ”とか任意の漢字入れるのってどうやるの?
%なんたらって表記に変換する関数ってある?

45:デフォルトの名無しさん
07/05/04 21:30:45
iconvかなんか使った後、gsubかなー?

46:デフォルトの名無しさん
07/05/04 21:32:35
open-uriは「1行ずつ」読まないから嫌いだ(w
ローカルに全部持ってきてから配列にして返してるだけじゃん。
仕方ないんだけど。

>>44
今書こうとしてた
%ナントカという形のURLエンコードされた日本語を直書きしてる>>41の方法は本当はまずい

require 'open-uri'
require 'kconv'
string = "ねこだいすき フリスキー".toutf8
url = URI.escape("URLリンク(www.google.com))

file=open(url).toeuc
print file

こんな形でどうぞ
Googleのie=はインプットのエンコーディングを、oe=はアウトプットのエンコーディングを指定するから、
全部EUC-JPな環境でやるならそのように書き換えるとstringとfileのとこでの変換の手間が減って楽

47:デフォルトの名無しさん
07/05/04 21:35:14
ああやっぱ当然のように間違えた
stringなんて慣れない気取った変数使うもんじゃないな

require 'open-uri'
require 'kconv'
str = "ねこだいすき フリスキー".toutf8
url = URI.escape("URLリンク(www.google.com)
-8&q=#{str}&num=50")

file=open(url).toeuc
print file


48:デフォルトの名無しさん
07/05/04 21:35:53
>>44

CGI.escape


49:デフォルトの名無しさん
07/05/04 21:36:43
CGIのを使うよりURI.escapeのほうが意味的にいいな。



50:デフォルトの名無しさん
07/05/04 21:46:17
open-uri を require すれば uri はくっついてくるからな
これのためだけに cgi を require するのはわりと無駄と思われ

51:デフォルトの名無しさん
07/05/04 22:14:41
cgi.rbは副作用があるからなぁ。

52:デフォルトの名無しさん
07/05/04 23:25:35
そもそもescape処理が微妙に違うんでないかい?

53:デフォルトの名無しさん
07/05/05 00:38:23
CGI::escapeの正規表現

str.gsub(/[^a-zA-Z0-9_\-.]/n)


URI::escapeの正規表現(長いので色々まとめた)

UNRESERVED = "a-zA-Z\d-_.!~*'()"
RESERVED = ";/?:@&=+$,\\[\\]"
UNSAFE = Regexp.new("[^#{PATTERN::UNRESERVED}#{PATTERN::RESERVED}]",false, 'N').freeze
str.gsub(UNSAFE)


54:デフォルトの名無しさん
07/05/05 00:43:39
っていうか、cgi.rbはuri.rb呼んでるんだと思ってた
独自実装なのね

55:デフォルトの名無しさん
07/05/05 01:30:42
uriより前からあるからね

56:デフォルトの名無しさん
07/05/05 01:36:01
$KCODE = 'u'
require "cgi"
require "Net/Hatena/Diary/keywordlink"

#cgi = CGI.new
#print cgi.header

wrd = <<-"EOF"
はてなダイアリーキーワード自動リンクAPI
■ 本ドキュメントに関する注意事項
本ドキュメントははてなキーワード(はてなダイアリーのキーワード)におけるAPI実装を解説するものです。主にはてなスタッフがその作成と更新を行っています。
EOF

p Net::Hatena::Diary.set_keyword_link(wrd)

上記スクリプトを実行すると意図する結果が返ってくるのですが、
コメント部分を削除し、CGIとして実行すると
Internal Server Errorがでます。

原因と対策を教えてください。

当方の環境。
MacOSX Ruby1.8.5 Apache1.3.33


57:デフォルトの名無しさん
07/05/05 01:51:58
>56
とりあえず手っ取り早い対策として
Apacheのエラーログ見れ&晒せ

58:デフォルトの名無しさん
07/05/05 02:30:33
i 0 u 4 ever

59:デフォルトの名無しさん
07/05/05 17:01:52
http://〜から始まる文字列やmailto:〜で始まる文字列に自動的に
タグ(http://〜なら<a href=""> </a>を)を挟んでくれるようなライブラリってあるんでしょうか?

こういうことってBBSとかで一般的にやってることだと思うんですが、処理に名前付けされてない
(もしくは自分が知らない)ので検索してもどうも見つからないです…。

ご存知の方いたら教えてください。宜しくお願いします。


60:デフォルトの名無しさん
07/05/05 17:06:33
>>59
正規表現+gsub

61:デフォルトの名無しさん
07/05/05 17:14:45
>>59
いわゆる「URLやメールアドレスを確実正確に抜き出す超絶複雑な正規表現」を内蔵したライブラリが標準でないか、という話なら、多分無い
URLリンク(www.din.or.jp)

62:デフォルトの名無しさん
07/05/05 17:23:26
>>59
URI.extract
URI.regexp


63:デフォルトの名無しさん
07/05/05 17:30:04
>>59
require 'open-uri'
#require 'uri' # 今回必要なのはuri.rbだがopen-uriに含まれてる
require 'kconv'

yahoo = 'URLリンク(dailynews.yahoo.co.jp)'
html = open(yahoo).read.toeuc

URI.extract(html,['http']){|uri|
puts uri
}

64:56
07/05/05 18:11:13
[18:09:51] zushitmacの発言: [Sat May 5 18:01:08 2007] [error] [client 127.0.0.1] Premature end of script headers: /Library/WebServer/CGI-Executables/rubytest.cgi
/Library/WebServer/CGI-Executables/rubytest.cgi:7:in `require': no such file to load -- Net/Hatena/Diary/keywordlink (LoadError)
from /Library/WebServer/CGI-Executables/rubytest.cgi:7
[Sat May 5 18:02:09 2007] [error] [client 127.0.0.1] Premature end of script headers: /Library/WebServer/CGI-Executables/rubytest.cgi
[Sat May 5 18:02:09 2007] [error] [client 127.0.0.1] File does not exist: /Library/WebServer/Documents/favicon.ico

二回ほど実行してみました。
・ヘッダがおかしいよ
・requireの失敗
という意味だと思いますが、
require部分とメソッド実行部分をコメントアウトして、
適当な文字をprintしてみるとprintされているのでヘッダは大丈夫だと思うのですが、どうすれば解決できるのでしょうか?

65:56
07/05/05 18:13:05
最初の
[18:09:51] zushitmacの発言:
の部分は無視してください。
書き込みのためにWinマシンにSkypeでメッセージを送ってコピペしたゴミです。

66:デフォルトの名無しさん
07/05/05 19:07:20
no such file to load -- Net/Hatena/Diary/keywordlink

指定したファイルが見つからないと言っている。

require しようとしているライブラリが入ってるかどうか、入っているならそれはどこか、ライブラリのサーチパスに含まれるかを調べれ。

67:デフォルトの名無しさん
07/05/05 19:31:45
>>66
同じスクリプトをCGI関連の部分をコメントアウトし、ターミナルで実行した場合はきちんと実行されるので
ライブラリは入っていると思うのですが、Apache側の設定でライブラリのパスを指定する必要があるということでしょうか?

68:デフォルトの名無しさん
07/05/05 20:02:18
レスthxです。

>>62,63
おお、ナイスな感じですね。

irb(main):035:0> pp URI.__send__(:class_variable_get,'@@schemes')
{"LDAP"=>URI::LDAP,
"FTP"=>URI::FTP,
"HTTPS"=>URI::HTTPS,
"MAILTO"=>URI::MailTo,
"HTTP"=>URI::HTTP}

っていう結果だったのでMailtoもいけちゃいそうですね。素晴らしい。

ただ今回はHTMLからURLを抜き出すのではなくて、テキストからURLを抜き出して
そのURLをHTMLのhrefタグで囲うっていうのが目的なのでそこは自分で実装しないといけなさそうですね。


69:デフォルトの名無しさん
07/05/05 20:31:34
>>67
よーわからんがもし load "Net/Hatena/Diary/keywordlink.rb"
でCGIが動作したなら mod_ruby が悪い

>>68
一番小難しいとこがライブラリでできて
一番カスタマイズしたいとこが自力でできるんだから喜べよ(w

ちなみにやってやれんこともないがこの機能は非常に不評

require 'open-uri'
require 'uri'
require 'kconv'
require 'cgi'

yahoo = 'URLリンク(dailynews.yahoo.co.jp)'
html = open(yahoo).read.toeuc

cgi=CGI.new('html4')

URI.extract(html,['http']){|uri|
puts cgi.a(uri){"#{uri}へのリンク"}
puts cgi.a({'href'=>uri,'target'=>'_blank'}){"#{uri}へのリンク(別窓で開きます)"}
}




70:MoonWolf ◆MoonWdLnkQ
07/05/05 22:26:46
>>64
requireは全部小文字で書いてね。


71:56
07/05/05 22:39:56
あれからいろいろやってみました。

たぶんですが、Ruby自体を2つインストールしているような・・・

ターミナル(zsh)で
ruby -e 'puts $LOAD_PATH'
したときは /opt/local/lib/ruby/以下を見に行っているのに
CGIスクリプトのほうで
p system("ruby -e 'puts $LOAD_PATH'")
したときは /usr/lib/ruby/ 以下を見に行っているみたい。

そのせいか、Apacheの環境変数をセットし直したり、もともとライブラリパスが通ってたところにライブラリをコピペしても
Net/Hatena/Diary/keywordlinkはちゃんといけてるのですが
以下のようなエラーをRubyが吐いてしまう事態になりました。

#<NoMethodError: private method `gsub' called for nil:NilClass> /usr/lib/ruby/1.8/cgi.rb:342:in `escape' /Library/WebServer/CGI-Executables/whatsthisbookproto1.rb:121
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:32:in `collect' /Library/WebServer/CGI-Executables/whatsthisbookproto1.rb:121
:in `each' /Library/WebServer/CGI-Executables/whatsthisbookproto1.rb:121
:in `collect' /Library/WebServer/CGI-Executables/whatsthisbookproto1.rb:121


ここまでくると、
・ローカルでの作業をあきらめる
・一切合切再インストール
しかないでしょうか?

72:デフォルトの名無しさん
07/05/05 22:45:31
>>70
了解しました。
小文字に修正しました。

73:デフォルトの名無しさん
07/05/05 22:49:26
ああ OSX なんだったか。 /opt/local/lib/ruby は MacPorts だな。 OSX に
は最初から ruby が入っているから、そっちを見ているのだろう。

CGI なんだよな? shebang はどうなっている? ちゃんと
#!/opt/local/bin/ruby
と指定してる?


74:デフォルトの名無しさん
07/05/05 23:22:32
>>73

textmateが自動的に吐いてくれる
#!/usr/bin/env ruby
から
#!/opt/local/bin/ruby
に変更することで無事に動くようになりました。

わざわざapacheの環境変数いじくり回す必要もなく、はじめからこうしておけばよかったorz

あと懺悔しますが、
>>71のエラーは単なるエラーだったのですね。
さっき、shebangのチェックのために新しいCGIを書いていてわかりました。

本当にありがとうございました。

スレ汚してしまいすいませんでした。



75:デフォルトの名無しさん
07/05/06 07:25:03
配列の要素をマージしたい場合って、
array_a + array_b
array_a.concat array_b
のどちらがいいの? 変わらないかな?
これ以外にもなにかお決まりの方法ある?

76:デフォルトの名無しさん
07/05/06 07:34:30
>>75
+ だと新しいオブジェクトが作られる
concatだと作られない

であってる?

77:デフォルトの名無しさん
07/05/06 08:45:37
マカってアフォだな。

78:デフォルトの名無しさん
07/05/06 09:22:09
メールフォーム作ろうと思うんですが、参考になるページを教えていただけませんか?

79:デフォルトの名無しさん
07/05/06 10:01:35
>>75-76
object_id というメソッドがある
同一のオブジェクトであれば同一の数字が割り振られてるはずだから、気になれば使え

で、マニュアル
> self + other
> self と other の内容を繋げた新しい配列を返します。
| 例:
| a = [1, 2]
| b = [8, 9]
| p a + b #=> [1, 2, 8, 9]
| p a #=> [1, 2] (変化なし)
| p b #=> [8, 9] (こちらも変化なし)
> concat(other)
> 配列 other を self の末尾に(破壊的に)連結します。 self を返します。
| 例:
| array = [1, 2]
| a = [3, 4]
| array.concat a
| p array # => [1, 2, 3, 4]
| p a # => [3, 4] # こちらは変わらない

で、実際上は
「array_a の内容だけを変えたい」なら concat しろ
array_a = array_a + array_b は array_a の中身の数値の結果だけは同じだが無駄で冗長でわかりにくい
(どっかこれ以前に array_a を参照してるオブジェクトがあった場合 array_b はそれには足されてないので注意)
「ふたつの配列を合わせた新しいオブジェクト」が欲しいなら + で足せ
array_c = array_a.concat array_b は(array_a と array_b を捨てるとして)結果は同じだがこう書かれると混乱する
p array_a.push(array_b).flatten とかやるのも何か意図を感じて引っかかるからやめとけ

80:デフォルトの名無しさん
07/05/06 10:56:25
Dir.globってなんで、Dirをnewしないで使えますか?
クラスメソッドって奴?

81:デフォルトの名無しさん
07/05/06 10:57:40
日本語でどうぞ

82:デフォルトの名無しさん
07/05/06 11:07:14
>>80
おーむねそういう理解で桶かと
マニュアルにもクラスメソッドのとこに書いてあるし

83:デフォルトの名無しさん
07/05/06 11:20:57
ホントだ、クラスメソッドのところに書いてありますね。

Rubyリファレンスマニュアル - Dir
URLリンク(www.ruby-lang.org)


84:デフォルトの名無しさん
07/05/06 11:30:31
RubyのマニュアルのURLは
URLリンク(www.ruby-lang.org)
で表示できるべきだと思ってみたりする

85:デフォルトの名無しさん
07/05/06 11:39:55
オブジェクトを、boolに変換したいのですが、
to_b ってのはないんですよね?
一発メソッドで変換!ってのはできないですか?

86:デフォルトの名無しさん
07/05/06 11:41:04
オブジェクトをboolに変換するアルゴリズムを
まずは自然言語で記述してみてくれ。

87:デフォルトの名無しさん
07/05/06 11:41:10
!!(x)

88:デフォルトの名無しさん
07/05/06 11:47:52
>>85
true & n

89:デフォルトの名無しさん
07/05/06 11:58:48
>>85
条件 ? falseでもnilでもない時返す値 : falseかnilのとき返す値

90:デフォルトの名無しさん
07/05/06 12:00:23
def Object.to_b; true & self end
"hello".to_b
NoMethodError: undefined method `to_b' for "hello":String


あれ、上手くいかないや

91:デフォルトの名無しさん
07/05/06 12:01:34
>>87
ああ、こんなのあるんですね。

でも、
!!("hello")
だと、
warning: string literal in condition
ってでますね

92:デフォルトの名無しさん
07/05/06 12:02:17
Ruby で false と nil が違うってなんでなん?


93:デフォルトの名無しさん
07/05/06 12:03:00
>>91
これって、リテラルのときだから、ふつうは、気にしなくていいですね。
ありがとうございました。

でも、>>90がエラーるのはなんでだ

94:デフォルトの名無しさん
07/05/06 12:07:07
>>88 は冗談だとでも思われてるんだろうか・・・。
TrueClass のリファレンスを見て欲しいよ。

95:デフォルトの名無しさん
07/05/06 12:12:04
つか「オブジェクトを真か偽のどちらかに変換したい」という要求自体が変

96:デフォルトの名無しさん
07/05/06 12:12:13
いやだから、>>90

97:デフォルトの名無しさん
07/05/06 12:13:22
>>95
変換したいわけではなく、ifにつっこんで、どうなるのかを得たいだけなのです

98:デフォルトの名無しさん
07/05/06 12:19:04
>>90 は静的メソッドにしてるからおかしいんだろ。

class Object; def to_b; true & self; end; end
p "hello".to_b

こうだ。

99:デフォルトの名無しさん
07/05/06 12:20:06
>>95
オブジェクトが nil か false の時は偽、それ以外のときは真なんだぜ。

100:デフォルトの名無しさん
07/05/06 12:25:42
スクリプト内で標準エラー出力の出力先をすげ替えるのってどうやりますか?

def mystderr(s)
end

が最終的に呼ばれるようにしてごにょごにょしたいんですが。

101:デフォルトの名無しさん
07/05/06 12:26:22
この手の人は真はどうでもよくて

irb> [false] ? 'T' : 'F'
=> "T"
irb> > '' ? 'T' : 'F'
=> "T"

これを偽にしたいとかいう要求だと予想

102:デフォルトの名無しさん
07/05/06 12:27:58
>>100
$stderrを書き変えれ

ただ、こういう事したスクリプトは公開せず自分のとこで使うだけにしとけ

103:デフォルトの名無しさん
07/05/06 12:29:37
>>100
マニュアルの $stderr の部分を参照

104:デフォルトの名無しさん
07/05/06 12:30:02
>>98-99
やっとわかた。サンクスでした

105:デフォルトの名無しさん
07/05/06 12:32:01
if(0) は真なのに注意な。

106:デフォルトの名無しさん
07/05/06 12:35:23
irb> > p if(0)
=> nil

うそつきいいいいいいいいいいいいいいいいいいいいいいいいいいいいい

107:デフォルトの名無しさん
07/05/06 12:37:52
p "hoge" if(0)

hoge

108:デフォルトの名無しさん
07/05/06 12:41:57
>>106
それは単に p の返り値じゃねーか…

でもなんでここで次行待ちしないで切れちゃうんだろう?
irb は p や puts を見かけたら行末で特別な処理してる?

109:デフォルトの名無しさん
07/05/06 13:14:02
括弧を付けたからifというメソッドだと誤認したんだろうけど、
このくらいまず予約語として認識してもいいような気がする。



110:デフォルトの名無しさん
07/05/06 13:30:03
>>108-109
後置ifだから…

111:デフォルトの名無しさん
07/05/06 13:42:07
privateなクラス定数/クラスメソッドはどのように書けばよいですか?

112:デフォルトの名無しさん
07/05/06 13:57:12
大人しくconcatします。ども。

113:デフォルトの名無しさん
07/05/06 13:57:35
privateってどんな動作を期待?

114:111
07/05/06 14:07:25
>>113
定義されたクラスとそのサブクラスからだけ参照できるのが望みです。

115:デフォルトの名無しさん
07/05/06 14:30:18
class Foo
 class << self
  def foo; puts "foo"; end
  private :foo
 end
end
定数は無理っぽいかなあ

116:デフォルトの名無しさん
07/05/06 14:53:47
すごく低レベルですみません

puts 'あなたの好きな数字を入力してね'
number = gets.chomp
puts 'あなたの選んだ数字に1を足すと' + number.to_i + 1

をするとtypeeroorがでてしまいますなぜでしょうk?


117:デフォルトの名無しさん
07/05/06 15:02:58
>>116
puts 'あなたの選んだ数字に1を足すと' , number.to_i + 1

これでどう?

118:デフォルトの名無しさん
07/05/06 15:08:00
>>116
一番楽なのは
puts 'あなたの選んだ数字に1を足すと' + number.to_i.to_s + 1.to_s
もしくは
puts ['あなたの選んだ数字に1を足すと' ,number.to_i ,1].join
かな

String + Int はIntがデフォルトでStringには型変換してくれないからエラー
俺もまだ初心者だから内部動作まで詳しく知ってるわけじゃないけど

あとちゃんとエラー内容も貼れ & 読め


119:デフォルトの名無しさん
07/05/06 15:09:37
>116
文字列は数値に対しての + の操作が定義されていないないから。to_sなどを
使って明示的に文字列化してやらないと + できない。

>117
それだと改行が入るのでは?


たぶんお手軽なのは、
puts "あなたの選んだ数字に1を足すと#{number.to_i+1}"
あたりじゃないかな。


120:デフォルトの名無しさん
07/05/06 15:16:25
puts 'あなたの好きな数字を入力してね'
number = gets.chomp.to_i
result = number + 1
puts "あなたの選んだ数字に1を足すと#{result}"

これが一番真っ当
エラーが出る理由はみんなのレスのとおり「文字列 + 整数」ができないことによる

121:111
07/05/06 15:16:28
>>115
ありがとうございます。 定数はメソッドで代用できるのでこれだけでも十分です。

……と思っていたのですが、これはインスタンスメソッドから呼べないですよね。
考えてみれば当然の事なんですが……、つまり要件定義が間違っていたと orz

自分の要求を自分でちゃんと理解できていなかったようです。
求めていたのは、正確にはクラス変数(@@変数)の定数版でした。
申し訳ありませんが、この場合についても、再度ご教示お願いします。

122:デフォルトの名無しさん
07/05/06 15:37:39
>>121
要求に合うかな…
privateなクラスメソッドは、文字通りprivate_class_methodを使う。

123:111
07/05/06 15:53:19
あれ? クラス変数が定数になったのと、自/サブクラスからしか呼べない
クラス定数とは、ほとんど同じものになるのかな。
そうすると答えは >>115 の通り無理?

>>122
ありがとうございます。調べてみます。
今からちょっと出かけるので、お返事は遅くなります。

124:デフォルトの名無しさん
07/05/06 16:52:25
カルト洗脳言語

125:デフォルトの名無しさん
07/05/06 17:02:41
カルト洗脳と言えばORACLE厨だな
あいつらひどすぎ

126:デフォルトの名無しさん
07/05/06 17:41:26
神託という名前からしてヤバい

127:デフォルトの名無しさん
07/05/06 17:50:01
Delphiを馬鹿にするなよ?

128:デフォルトの名無しさん
07/05/06 18:13:06
そうだそうだ、あんまり馬鹿にしてると邪鬼眼使いのDelphiユーザに殺されちまうぞ。

129:デフォルトの名無しさん
07/05/06 19:04:42
定数を返す関数を作れば
一応動作的には private な定数を作る事は出来る。

130:デフォルトの名無しさん
07/05/06 19:14:27
>>115
class << self って、どういうこと?

131:デフォルトの名無しさん
07/05/06 19:21:53
class Foo
private
 def foo
 end

 def bar
 end
end

としても foo と bar は private になるけど、
private :foo とか使ってる人は何か理由はあってそうしてるの?

132:デフォルトの名無しさん
07/05/06 19:40:52
>>130
クラスメソッドをまとめて定義するときに使う

>>131
後で見るときにスクロールとかしないで一行で分かるからじゃないかな

133:デフォルトの名無しさん
07/05/06 19:44:29
rubyっておらおらできないの?

134:デフォルトの名無しさん
07/05/06 19:50:51
Rubyを使って素敵な彼女を取得するコードを教えてください(><

135:デフォルトの名無しさん
07/05/06 19:52:42
現在のコード位置がprivateか否かを気にしなくて済むので private :foo を使う。


136:デフォルトの名無しさん
07/05/06 19:57:53
クラスメソッドの定義の書き方をどうしようか、という話に似てるな

137:デフォルトの名無しさん
07/05/06 20:19:28
全部に public/protected/private を付ければいいって話でもないのだろうか。

138:デフォルトの名無しさん
07/05/06 21:21:57
>>134
それは難しいですね。
前科者のレッテルなら、大抵のコードで取得できるんですが。

139:デフォルトの名無しさん
07/05/06 21:40:11
>>134
銀座の宝石店にでも連れて行け
一緒に行ってくれるとは限らないがw

140:デフォルトの名無しさん
07/05/07 09:45:47
Dir.globで、専用ディレクトリから年月日の数字のファイル名を配列として得てた。
毎日ファイルは増えるんだが、「最新の日時のファイル名」を得るために
lastfile=Dir.glob("hogedir/200?????.dat")[-1,1]
とかやってた。

…ソートされたような順で取り出されてるとは限らないんだな。
これまでは数字の大きいのが配列の最後になってたんだが、
5月4日からなぜか5月4日のファイル(20070504.dat)がいつも最後に来るようになった。

変なとこに依存するコード書くのやめよう…。

141:デフォルトの名無しさん
07/05/07 11:01:07
>>140
それじゃ「最新の日時のファイル名」じゃなくてそれだけを含む配列だろう。

> …ソートされたような順で取り出されてるとは限らないんだな。
ファイルシステム依存。
毎回違う順序でもなんら問題ないけど、セクタ内ではソートされてるけどセクタはソートされてないとかかね。


142:デフォルトの名無しさん
07/05/07 12:44:20
Marshalの信頼性、耐障害性ってどんなもんですか?
掲示板の過去ログファイルに使えないかと検討しているんですが・・・
xmlをパースして、追加データをマージして、整合性をとって・・・は結構大変そうなのでMarshalが使えればと・・・

143:デフォルトの名無しさん
07/05/07 12:50:23
>>134
extend Ko1


144:デフォルトの名無しさん
07/05/07 12:56:35
>>142
正直言って、信頼性や耐障害性はそうとう低い。
Web掲示板のログみたいなものだったら、もっと別の手段を検討することをお勧めする。

145:デフォルトの名無しさん
07/05/07 13:06:01
「元データ」を別に確保した上で「便利にアクセス可能な加工済みデータ」を保持するのに使うのが最上
元データからガリゴリやると3秒だがPStoreからにょろっと読み込むと0.5秒だとかそういうの

壊れる可能性や壊れたときの悲惨さは改行区切りのテキストファイルより悲惨
書き込み順番キーつきでコンマ区切りに保存して表示前に書き込み順にソートとか
そういう方法のほうが処理時間もCPU時間も使うが遥かにマシ

146:デフォルトの名無しさん
07/05/07 16:49:32
>>120
話は若干ずれるんだけど、
sprintfとかprintfはRubyだとあまり使わないですか?

printf "あなたの選んだ数字に1を足すと%s",result

とか
これくらい単純だと確かにputsに式展開でいいかもとは思うんだけど、長くなったり
出力じゃなくて文字列を整形したい場合とかも多いからよくsprintf使うんだけれど、
遅かったりするのかなぁ、と思いまして




147:デフォルトの名無しさん
07/05/07 16:55:55
整形する場合は普通に使うが。

148:デフォルトの名無しさん
07/05/07 17:00:56
「Rubyたのしー」と言ってる人は "〜" と '〜' を平気で使い分けるので
sprintf でないとできない、あるいは遠回り大回りであるのなら別にフツーに使うと思われ

ただ表示するだけでは printf はまず使わないな
sprintf は % で代用する人が多いように見える

149:デフォルトの名無しさん
07/05/07 18:35:50
ActiveRecordでサブクエリーすることってできないの?


150:デフォルトの名無しさん
07/05/07 20:16:32
>>149
スレち



今んとこfind_by_sqlで直接書くしかないね

151:デフォルトの名無しさん
07/05/07 20:56:48
>>142
xmlや独自形式以外にも、yamlやjsonといった手もある

152:デフォルトの名無しさん
07/05/07 21:28:25
>>142
YAMLを使ってみてはどうだろう。
require 'yaml'
data = { 'key': 'data' } # 任意のデータ
puts data.to_yaml
日本語がバイナリとして認識されるという問題があるが、そもそもmarshalを使うつもりだったんだし問題ないだろう。


153:デフォルトの名無しさん
07/05/07 22:50:28
rake 0.7.3 を WinXPで試しているのですが、
出力先ディレクトリを指定したくて、以下のようなスクリプトを書いてみたのですが、
rake aborted!
となってしまいます。
出力先を変更しないで(ちょうどmap!のところ)をコメントアウトすれば、動作してくれます。
このようなケースではどうするのがセオリーでしょうか?

OUTPUT_DIR = "output/"
SRCS = FileList["**/*.src"]
DSTS = SRCS.ext('dst')

DSTS.map! do |e| #
OUTPUT_DIR + e #
end #

task "default" => DSTS

rule '.dst' => '.src' do |t|
sh "SRC2DST.exe #{t.source} -o#{OUTPUT_DIR}"
end


154:デフォルトの名無しさん
07/05/07 23:26:32
ruleでlamdaるのがセオリーじゃなかったけ・・・

155:デフォルトの名無しさん
07/05/07 23:31:13
いや、違うな・・・
正規表現で、ruleでOUTPUT_DIR含めて指定すればよかったと思う。
で、lambdaで、srcをbasenameして指定する

156:デフォルトの名無しさん
07/05/07 23:34:33
んー。手元のRakefileみたら、別にOUTPUT_DIR含めなくてもいいようになってたな・・・
わかんねーな・・・

157:デフォルトの名無しさん
07/05/07 23:36:18
ああ、わかった。

OUTPUT_DIRとSRCSが対応してないからだ。
やはり、rule の srcをlambdaで、SRCSに関連付ける必要があるはず

158:デフォルトの名無しさん
07/05/07 23:55:49
>>154-157
ありがとうございます。

lambda使ったことない厨房なんで、lambdaの使い方から調べる必要があるようです。
rule '.dst' => lambda{SRCS} do |t|
とやっただけだとやっぱりだめでした。

とりあえず、終電逃しそうなので帰宅後にlambda調べます。

159:デフォルトの名無しさん
07/05/08 00:39:57
いや、SRCSだと全体じゃないかw

'.dst'と、どこの.srcかを関連付けないといけないとダメなはず


160:デフォルトの名無しさん
07/05/08 00:41:50
あと、rake参考になるページ

Rake
URLリンク(www2s.biglobe.ne.jp)


161:デフォルトの名無しさん
07/05/08 01:07:56
>>148
print("Hello, World!\n")
って書いたら
puts 'Hello, World!'
って書き直すのがRuby信者

162:デフォルトの名無しさん
07/05/08 01:34:34
>>161
へー

163:デフォルトの名無しさん
07/05/08 02:09:01
Javaで使えるYAMLクラスはありますか?

164:デフォルトの名無しさん
07/05/08 02:20:07
あるかないかという問いなら「ある」が答え。


165:デフォルトの名無しさん
07/05/08 02:22:28
URLリンク(journal.mycom.co.jp)

スレ違いだから続きはあっちで


166:デフォルトの名無しさん
07/05/08 02:23:49
ごめん間違えた
URLリンク(journal.mycom.co.jp)


167:デフォルトの名無しさん
07/05/08 11:11:54
to_yamlが日本語がユニコードエスケープされる件については
RailsのPlug-inでyaml_wamlってのが解決してくれるよ
URLリンク(d.hatena.ne.jp)

ソース読めば分かると思うけど、すべてのクラスのto_yamlメソッドを置き換えるもんだから
Railsからはずしても使えると思われ




168:デフォルトの名無しさん
07/05/08 16:06:29
俺は puts format() をよく使う。
inspect も format で返すかな。

俺にはどうも "#{式}" は読みづらい。
単純に変数を埋め込むぐらいならいいが
式を書くなら俺は format("%s",式) するよ。

169:デフォルトの名無しさん
07/05/08 16:21:14
まあ、表示結果は一緒だし好きなの使えって話なんだが禁句だな

>>168
「フォーマット文字列」が必要ない場合、普通に使うと %s だらけになるのがイヤ。超イヤ。
だいたい %s って何よ。「文字列です」以上の意味ないじゃん。お前の中身は何なのよ。
ケツの式の一覧を一対一で対応させていちいち数えて探せってか。首振って首つるわアホ。
その点 #{〜} 埋め込みならフクザツな式は直前で変数に入れれば解決。
しかも変数名ごと読めば読み下しやすい。完璧。超完璧。

170:デフォルトの名無しさん
07/05/08 16:37:41
対応とか考えなくていいから、# の方が安全になるわな。

171:デフォルトの名無しさん
07/05/08 17:14:56
Ruby以前に printf にどれだけ慣れてしまってるかどうかがかなり分かれ目かと思う

172:デフォルトの名無しさん
07/05/08 17:19:32
#{ } 内が長くなるような場合は、事前に計算しとけばいいな。

173:168
07/05/08 17:34:36
>169
引数多くなるような format なら、素直に文字列同士繋ぐよw

>171
俺はDelphi厨時代 + で繋ぐことしかしてなかった。
'文字列' + IntToStr(式) + '文字列' って感じね。
C言語とかやったこと無いから printf 書式は Ruby が初だよ。

"#{ }" が馴染めないのは…なんでだろ?
自分でもよく分からんが、ゴチャゴチャした感じを受けるんだよ…

174:デフォルトの名無しさん
07/05/08 17:37:49
#{ } でまずいのは、国際化だな。

175:134
07/05/08 17:43:14
>>139
ありがとうございます! でもダメでした
mvしようとしたら、permission deniedってエラーが出るんです・・・

>>143
これもエラーでした。Ko1が見つからないそうです

176:デフォルトの名無しさん
07/05/08 20:49:51
>>174
うん、こくさいか

177:デフォルトの名無しさん
07/05/08 20:53:58
>>173
IntToStr って、# よりゴチャゴチャしてるだろ・・・

178:デフォルトの名無しさん
07/05/08 21:42:36
俺はエディタが色変えてくれるおかげか、#{ }はそんなにゴチャゴチャ
してるようには感じないが、色の変化がなければちょっとキツイかも

179:デフォルトの名無しさん
07/05/08 21:45:26

       FOX★公認!!!

俺たちのクリックで日本を一位にしようぜ!!
“30年は日本に手は出せないな”という勝ち方をしたい
スレリンク(news4vip板)

1. ポーランド  139,797,680
2. チリ     137,040,439
3. ★日本    86,475,213★
4. イスラエル  80,930,530
5. スロベニア  57,137,042
6. フィンランド  40,857,499

石を投げる戦争から人は進化・進歩を遂げ、剣や槍などの武器をもって戦うようになった
人間はさらに発展し兵器を使う戦争を始めた
そして今、指先一つを武器とした電脳戦争が勃発したのであった・・・
皇国を勝利へと導くには貴様らの参戦が不可欠である

・戦場
URLリンク(www.clickclickclick.com)
・まとめサイト
URLリンク(www33.atwiki.jp)


180:デフォルトの名無しさん
07/05/08 21:56:52
コピペ君って馬鹿だな、まで読んだ。

181:デフォルトの名無しさん
07/05/08 23:12:54
ruby のif文って使いにくくないですか?
if ひとつにつき end を付けなきゃいけないから深く掘り過ぎるとend一つか二つ忘れる・・・

182:デフォルトの名無しさん
07/05/08 23:28:55
Perl の if 文って使いにくくないですか?
if ひとつにつき } を付けなきゃいけないから深く掘り過ぎると } 一つか二つ忘れる・・・


そんくらいで使いにくいってあり得ないだろ。
というか、if 書いた時にはとりあえず対の end を書いてから、中身を書くもんだ。

183:デフォルトの名無しさん
07/05/08 23:39:26
まあ、改行で区切る仕様でもよかったとは思う

endはエディタの支援機能で書く

endと書いてTabキーを押すとinvalid nestとか文句言われる

184:デフォルトの名無しさん
07/05/08 23:42:06
そしてインデントで区別する仕様に(ry

185:デフォルトの名無しさん
07/05/09 00:49:42
いまだに
if(){
}
って書いて実行時にあれ?って思うことが良くある


186:デフォルトの名無しさん
07/05/09 01:05:18
稀に when と case を間違えるのは俺だけでいい
しかし

return << <<EOF
<html>
<title>やほー</title>
<h1>#{title}</h1>
</html>
EOF

とか

html <<EOB
<table>
<tr><td>テーブルだよ</td><tr>
</table>
EOB

とか書いてエラーに悩んでしまう人は俺以外にも居ると信じていいですか


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5390日前に更新/121 KB
担当:undef