Ruby 初心者スレッド Part 50
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2012/07/29(日) 14:26:28.92質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
RoRはスレ違いよ
前スレ
Ruby 初心者スレッド Part 49
http://toro.2ch.net/test/read.cgi/tech/1336507487/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
0552デフォルトの名無しさん
2012/11/14(水) 18:08:16.080553デフォルトの名無しさん
2012/11/14(水) 20:15:14.51それぞれの違いとかどんなものなのか知りたいのだけど資料もあまり多くはないな
0554デフォルトの名無しさん
2012/11/15(木) 08:51:04.6116進文字コードと、正規表現の入力チェックに
関して質問したいことが出ました。
"0123456789" =~ /¥A¥d+¥z/u
=> 0
こういう入力チェックをしている状況で、
たとえば先頭の0を16進表記しても
"¥x30123456789" =~ /¥A¥d+¥z/u
=> 0
という風になります。
'¥x30123456789' =~ /¥A¥d+¥z/u
=> nil
一方、式展開をさせないシングルクォートだと
こうなります。
irb以外の、ブラウザからの
postやgetされた16進表記などの入力値は、
どういう風に処理されるのでしょうか
¥x30はrubyで処理するときにはもう既に
展開されて0になっているのか、などです。
それとも処理系やブラウザ依存でしょうか。
0555デフォルトの名無しさん
2012/11/15(木) 08:53:12.8016進文字コードと、正規表現の入力チェックに
関して質問したいことが出ました。
"0123456789" =~ /\A\d+\z/u
=> 0
こういう入力チェックをしている状況で、
たとえば先頭の0を16進表記しても
"\x30123456789" =~ /\A\d+\z/u
=> 0
という風になります。
'\x30123456789' =~ /\A\d+\z/u
=> nil
一方、式展開をさせないシングルクォートだと
こうなります。
irb以外の、ブラウザからの
postやgetされた16進表記などの入力値は、
どういう風に処理されるのでしょうか
\x30はrubyで処理するときにはもう既に
展開されて0になっているのか、などです。
それとも処理系やブラウザ依存でしょうか。
0556デフォルトの名無しさん
2012/11/15(木) 08:56:09.86いいえ
>処理系や
いいえ
>ブラウザ依存
いいえ
0557デフォルトの名無しさん
2012/11/15(木) 08:56:33.08(マカーだ…)
(マカーが来たわ…)
0558デフォルトの名無しさん
2012/11/15(木) 11:32:51.710559デフォルトの名無しさん
2012/11/15(木) 12:33:39.08茨の道だからお薦めはしない
LLでやりたいってことなら
Pythonの方がWindowsと相性良い
0560デフォルトの名無しさん
2012/11/15(木) 13:10:18.990561デフォルトの名無しさん
2012/11/15(木) 16:25:01.43>日本語文字コードの変換
>【要点】
>Ruby バージョン 1.9 以降: String::encode を使う
>Ruby バージョン 1.8 以下: NKF を使う
1.9 でも、NKF を使っていてもいいんでしょ?
0562デフォルトの名無しさん
2012/11/15(木) 18:25:56.63はい
0563デフォルトの名無しさん
2012/11/15(木) 20:41:02.78サーバー chat.na1.lol.riotgames.com
ポート 5223
SSL使用
接続したあと pvp.netに認証↓
ドメイン pvp.net
ID tarou
PASS test
resource xiff
これをXMPPで送信したいんですけどRubyでやる方法教えてください
0564デフォルトの名無しさん
2012/11/15(木) 20:41:50.02これをRubyに書き直してください
じゃあ
0565デフォルトの名無しさん
2012/11/15(木) 20:49:25.270566デフォルトの名無しさん
2012/11/16(金) 08:52:30.95>>562
あざまっす処理系やブラウザには依存しない、
でOKのようですね。
>¥x30はrubyで処理するときにはもう既に展開されて0になっているのか
ここについてはご意見違うようですが。
httpの通信の部分ですよね。
0567デフォルトの名無しさん
2012/11/16(金) 09:15:29.92知ってるかもしれませんが、
ローカルでirbやったりすると
Windowsと比較にならないくらい
実行が早いっすよ。
MacBookAirはスタバでドヤ顔のためでもなく
デザイナーのためでもなく、
エンジニアのノマド開発用だとおもいます。
0568デフォルトの名無しさん
2012/11/16(金) 09:37:02.240569デフォルトの名無しさん
2012/11/16(金) 11:19:22.83Window8があまりにひどいので
次買い換えるときはMacにするかも知れない
楽しみに待っててね!
0570デフォルトの名無しさん
2012/11/16(金) 11:33:04.355年前くらいの頭で止まってるとそうなる
Windows7マシンにCUIなLinuxをVMで入れるのがコスパと使い勝手の総合で現状最強
※ コスパを入れ忘れないように願います
0571デフォルトの名無しさん
2012/11/16(金) 12:48:33.420572デフォルトの名無しさん
2012/11/16(金) 17:35:15.04hash.merge!(key: "change")
end
h = {key: "value"}
change(h)
h[:key] # => "change"
となるのに、rspecで
it do
h = {key: "value"}
change(h)
h[:key].should == "change"
end
とすると
expected: "change"
got: "value" (using ==) となってしまいます。
なにが間違っているんでしょうか。
0573デフォルトの名無しさん
2012/11/16(金) 23:00:19.56method(:change) を出力してみると分かるかもしれないけど、
RSpecが定義しているマッチャーメソッドに change がある。
expect { operation }.to change(:hoge).from(X).to(Y)
のように使う奴。
別の名前のメソッドにすれば期待通りに動く。
0574デフォルトの名無しさん
2012/11/17(土) 01:54:35.18無事動作しました!
0575デフォルトの名無しさん
2012/11/17(土) 06:10:57.410576デフォルトの名無しさん
2012/11/17(土) 18:28:26.52無料の中では、Linux良いよね。
0577デフォルトの名無しさん
2012/11/17(土) 18:37:11.81どれほど堅牢かは知らないけどRipper.sexpや
https://github.com/aarongough/treetop-sexp-parser
いっそのことLLスレにお題として持ち込んでみてほしい
0578デフォルトの名無しさん
2012/11/17(土) 18:51:06.190579デフォルトの名無しさん
2012/11/17(土) 20:56:36.01>>577は少し試してみたけど使えそう。
ってか、基本rubygemsしか探さないから気づかなかったわ。
ありが�d
0580デフォルトの名無しさん
2012/11/18(日) 04:57:48.10なんで名前空間分かれてないの?
0581デフォルトの名無しさん
2012/11/18(日) 05:02:48.19ユーザーはキーワードを事前にすべて把握「していなければならない」
これはDSL使用における不可避な義務
assertというメソッド作ったらぶっ壊れるのと同じ
0582デフォルトの名無しさん
2012/11/18(日) 19:38:46.37http://doc.ruby-lang.org/ja/1.9.3/class/Time.html
t = Time.now
p t
p t.succ
を実行するとwarning: Time#succ is obsolete; use time + 1って警告が出ます。
p t + 1と書けということなんでしょうが、succは1.9.3では非推奨なんですか?
将来のバージョンではsuccは消えるってことでしょうか?
0583デフォルトの名無しさん
2012/11/19(月) 10:20:22.30foo {|x| x == nil ? 1 : 0 }
みたいな関数呼び出しがあったとして、foo()が受け取ったブロックの中身を構文木として取り出してごにょごにょしたい。
0584デフォルトの名無しさん
2012/11/19(月) 10:56:29.330585デフォルトの名無しさん
2012/11/19(月) 14:11:23.12できないってことか。
0586デフォルトの名無しさん
2012/11/19(月) 14:15:17.750587デフォルトの名無しさん
2012/11/19(月) 19:15:08.83Rubyの標準機能ではできない。たしかRubiniusならできたような。
>>584
exerbはソースコードをパースしてるだけなんじゃないの?583がやろうとしているのはそうじゃないでしょ。
0588デフォルトの名無しさん
2012/11/20(火) 15:37:59.31$ rvm list
rvm rubies
=* ruby-1.9.3-p194 [ x86_64 ]
# => - current
# =* - current && default
# * - default
which rubyだと
/usr/local/rvm/rubies/ruby-1.9.3-p194/bin/ruby
$ ruby --version
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin12.2.0]
です。
0589デフォルトの名無しさん
2012/11/21(水) 20:49:38.11環境 ruby1.8 windows7
# 配列を作成
ary = [
[1, "aさん", "[email protected]"],
[2, "bさん", "[email protected]"],
[3, "cさん", "[email protected]"],
[4, "dさん", "[email protected]"]
]
require "CSV"
file = CSV.open("hoge.csv", "w", "\t", "\n")
ary.each { |row| file << row }
配列をタブ区切りCSV?に出力するコードに、
↓な感じでダブルクォーテーションをつけようとしたんだけどエラーが出るんです。
file = CSV.open("hoge.csv", "w", "\t", "\n", {:force_quotes=>true})
エラーメッセージ
C:/AptanaWorkspace/Hello2/array2.rb:13:in `open': wrong number of arguments (5 for 4) (ArgumentError)
from C:/AptanaWorkspace/Hello2/array2.rb:13
↓にするとダブルクォーテーションは付くんだけど、区切りの文字はないし改行もされないです
file = CSV.open("hoge.csv", "w", "", {:force_quotes=>true})
0590デフォルトの名無しさん
2012/11/21(水) 20:51:32.91file = CSV.open("hoge.csv", "w", "\t", {:force_quotes=>true})
エラーメッセージ
c:/ruby/lib/ruby/1.8/CSV.rb:492:in `index': type mismatch: Hash given (TypeError)
from c:/ruby/lib/ruby/1.8/CSV.rb:492:in `generate_body'
from c:/ruby/lib/ruby/1.8/CSV.rb:288:in `generate_row'
from c:/ruby/lib/ruby/1.8/CSV.rb:692:in `<<'
from C:/AptanaWorkspace/Hello2/array2.rb:16
from C:/AptanaWorkspace/Hello2/array2.rb:16:in `each'
from C:/AptanaWorkspace/Hello2/array2.rb:16
csv.rbを覗いてみると83行目が↓になっててパラメータを5つ渡せるように見えるのですが
最後の&blockはパラメータではないのでしょうか?
def CSV.open(path, mode, fs = nil, rs = nil, &block)
0591デフォルトの名無しさん
2012/11/21(水) 20:59:24.16&block はブロックなのでここの open の上の方のように書きます
ttp://doc.ruby-lang.org/ja/1.8.7/class/CSV.html
0592デフォルトの名無しさん
2012/11/21(水) 22:16:59.39どこを見ればいいのかわかりませんorz
{:force_quotes=>true}をどこらへんに書けばいいのでしょうか
0593デフォルトの名無しさん
2012/11/21(水) 22:49:44.821.8じゃそんなオプションないとかじゃないの?
適当にリファレンス見てみると
http://doc.ruby-lang.org/ja/1.8.7/class/CSV.html こっちはforce_quotesなんて見つからないけど
http://doc.ruby-lang.org/ja/1.9.2/class/CSV.html 1.9だと普通に書いてあるし
0594デフォルトの名無しさん
2012/11/21(水) 23:00:10.211.8にFasterCSV入れれば同じように使えるかと
0595デフォルトの名無しさん
2012/11/22(木) 00:12:46.16file = CSV.open("hoge.csv", "w", "", {:force_quotes=>true})
これだと一応ダブルクォーテーションは付いたので、対応してるのかなと思いましたが、
1.9からの機能かも知れないのですね
1.8にFasterCSV入れるか1.9でやってみます!
0596デフォルトの名無しさん
2012/11/22(木) 18:34:41.520597デフォルトの名無しさん
2012/11/22(木) 21:30:30.370598デフォルトの名無しさん
2012/11/23(金) 01:05:19.560599デフォルトの名無しさん
2012/11/23(金) 01:13:15.600600デフォルトの名無しさん
2012/11/23(金) 01:47:24.140601デフォルトの名無しさん
2012/11/23(金) 02:10:54.99あんたすげぇよ…
0602デフォルトの名無しさん
2012/11/24(土) 16:11:03.86str = result
require 'net/ftp'
ftp.open('server', 'user', 'pass')
この後、ftp.put()でstrをアップしたいのですが、ftp.put()はファイルのパスを引数に取るので、strを渡せません。
ファイルのパスを引数に取るメソッドはたくさんあるのでこのようなケースはよくありそうなのですが、一般的にはどのように処理すればいいのでしょうか。
0603デフォルトの名無しさん
2012/11/24(土) 16:14:43.240604デフォルトの名無しさん
2012/11/24(土) 16:22:39.91net/ftpはpurerubyだからソースを読んでみるといい
どうせ回答も似たようなのしか来ないだろう
0605デフォルトの名無しさん
2012/11/24(土) 18:36:13.15nfsとかで直接って書き込めばいいじゃん。
0606デフォルトの名無しさん
2012/11/24(土) 19:43:28.180607デフォルトの名無しさん
2012/11/24(土) 23:05:30.990608デフォルトの名無しさん
2012/11/25(日) 05:06:33.050609デフォルトの名無しさん
2012/11/25(日) 12:24:17.92http://doc.ruby-lang.org/ja/1.9.3/method/Net=3a=3aFTP/i/put.html
0610デフォルトの名無しさん
2012/11/25(日) 12:32:27.08Gmailの下書きにファイルを添付したメールを保存
ってできそうでしょうか?
watirで行けるかと思いきや、IE向けのSeleniumドライバ?を別途インストールする必要があるみたいでした
0611デフォルトの名無しさん
2012/11/25(日) 14:52:34.83gmailをimapでアクセス可に設定できるのなら簡単になりそうじゃない?
0612デフォルトの名無しさん
2012/11/25(日) 15:32:17.360613デフォルトの名無しさん
2012/11/25(日) 22:07:20.44できるだけWebアクセス(httpかhttps)だけで・・・と考えてましたが
こだわらないとしたら確かにimapでできそうですね
ありがとうございます考えてみます
0614デフォルトの名無しさん
2012/11/27(火) 21:27:27.98to_iやto_fをtoiやtofに変更したいのですがどうしたらいいでしょうか
0615デフォルトの名無しさん
2012/11/27(火) 21:35:33.63class String
alias toi to_i
end
あたりでいいんじゃないの?
# 尚、Rational, Float, Complexにも定義されている。
0616デフォルトの名無しさん
2012/11/27(火) 21:47:04.00ありがとうございます
単に自分の環境だと打ちにくいから変更したいというだけで
いわゆる動く擬似コードの視点から見ればto_iやto_fのが
良いと思ってます
0617デフォルトの名無しさん
2012/11/28(水) 14:09:32.060618デフォルトの名無しさん
2012/11/28(水) 14:15:43.00エディタ何使ってるかしらんけど、補完や短縮入力あればそれで
Vimなら、
iabbr toi toi
とか。スレ痴やな…
0619デフォルトの名無しさん
2012/12/01(土) 05:37:33.04Javaは付いてるのに…
0620デフォルトの名無しさん
2012/12/01(土) 06:34:39.05一般にgzipだからrubyにはzlibが用意されてる
Javaはjarファイルとの絡みでzipの読み書き欲しいだろうけど
0621デフォルトの名無しさん
2012/12/01(土) 11:14:56.990622デフォルトの名無しさん
2012/12/01(土) 11:19:23.60全OS制覇を目指すならそれくらい標準でできんとお話にならん
Rubyは「そういうのめんどくさいからやりたい人が誰かやって」で通してきたからなあ
0623デフォルトの名無しさん
2012/12/01(土) 12:01:20.250624デフォルトの名無しさん
2012/12/01(土) 15:39:28.62だがjavaのzipは日本語がうにこーどでウィンドウズのツールで開くとうにうに
0625デフォルトの名無しさん
2012/12/01(土) 15:44:33.78情弱乙
0626デフォルトの名無しさん
2012/12/01(土) 18:12:39.74Gemなんて知らねって(Rubyをただの実行環境としか使ってない)人に渡すのが難なんだよね
0627デフォルトの名無しさん
2012/12/01(土) 20:56:18.54メソッド群をcommaderのところで
イテレーション実行する際、
hogeのようにパラメータが不要な場合に
__send__のところの、*argsをうまく
取り除く?方法はないでしょうか?
class A
def hoge
puts("hogehoge")
end
def fuga(x)
puts(x)
end
def commander
order = [:hoge, :fuga]
params = {:fiuga => "fugafuga"}
self.each{|method|
args = params[method]
self.__send__(method, *args)
}
end
0628デフォルトの名無しさん
2012/12/01(土) 21:03:58.360630デフォルトの名無しさん
2012/12/01(土) 22:56:51.67(脱線:self.eachはorder.each だろうか?)
method(method).arity で判断とか。
質問で使っているローカル変数と被って紛らわしいな。
0631デフォルトの名無しさん
2012/12/02(日) 00:39:51.52argsが空の配列だと引数は無かったものになるよ
def hoge() :hoge end
send(:hoge,*[]) # => :hoge
send(:hoge,*[1]) #ArgumentError
0632デフォルトの名無しさん
2012/12/02(日) 01:08:18.28渡し損ねてエラーになってるのを見間違えたのだろうか?
0633デフォルトの名無しさん
2012/12/02(日) 03:22:34.15誤字、脱字多くて失礼しました。回答ありがとうです
>>631
>argsが空の配列だと引数は無かったものになるよ
ありがとうございます。これ使わせていただきます。
0634デフォルトの名無しさん
2012/12/02(日) 03:58:56.73WINDOWSで一定時間(10分)ごとにブラウザ(ChromeかIE)を更新(読み込み)するマクロ
を教えて下さいお願いします
0635デフォルトの名無しさん
2012/12/02(日) 05:17:12.17webrick/httpproxyでコンテンツ編集するプロクシ作って
window.setTimeout(function(){window.location.reload()},1000*60*60*10);
みたいなjavascriptをHTMLソースに埋め込む
つうか自動更新付いてるブラウザか拡張機能使えよ
0636デフォルトの名無しさん
2012/12/02(日) 06:04:45.67更新するページを自分が管理しているのかどうかとか、
もっと具体的に
0637デフォルトの名無しさん
2012/12/02(日) 06:48:26.10いちいち見せなくてもいいのならRubyで取得して差分出したりなんだりということはできるが、用途次第っすなー
ちなみにどこをどう頑張ってもいわゆるマクロ相当の簡便さ可搬さにはできない
IE操作ならVB.netとかC#使え
Firefoxアドオン製作ならjavaScript使え
どちらにおいてもRubyの出番はない
0638デフォルトの名無しさん
2012/12/02(日) 15:27:02.35*/1 * * * * ruby -e 'puts "#{Time.now.to_i}\t#{`コマンド`}"' >> ~/ファイル名.txt
txtを見てみるとunixタイムとタブのみ出力されていて、肝心のrubyの結果が出ないんだ
コマンド>> ~/ファイル名.txtのみで実行したときはしっかりと出力されるんだが。。。
crontabの書き方が悪いのか?
0639デフォルトの名無しさん
2012/12/02(日) 16:02:03.06とりあえず最後に 2>&1 を追加して様子を見る
0640デフォルトの名無しさん
2012/12/02(日) 16:15:50.90コマンドが見つからないみたいだ パスがおかしいのか?
0641デフォルトの名無しさん
2012/12/02(日) 16:42:57.25まあrubyとはあんまり関係ない部分だと思うわ
0642デフォルトの名無しさん
2012/12/02(日) 20:18:19.060643デフォルトの名無しさん
2012/12/02(日) 20:33:56.900644デフォルトの名無しさん
2012/12/02(日) 21:00:03.690645デフォルトの名無しさん
2012/12/02(日) 21:04:12.52PATH通ってないことがほとんどだな
ユーザーが手動ログインしたときの環境とcrontabが実行されるときの環境はほとんどの場合まったく違う
Rubyをrvmやrbenvでホームディレクトリにインストールしている場合なんかはそのままではたいてい動かない
0646デフォルトの名無しさん
2012/12/02(日) 21:09:12.15PerlのCPANみたいなのありますか?
それはCPANよりモジュールそろってますか?
教えて
0647デフォルトの名無しさん
2012/12/02(日) 23:21:21.95あなたみたいな人はVBAでも弄ってる方が絶対に幸せだよ
0648デフォルトの名無しさん
2012/12/02(日) 23:33:39.85バインドでも充実させてくれれば良いのにな
0649デフォルトの名無しさん
2012/12/03(月) 00:19:06.11きみにぴったりなのはpythonだよ
0650デフォルトの名無しさん
2012/12/03(月) 11:39:57.13CPANほどそろってない
0651デフォルトの名無しさん
2012/12/03(月) 12:55:46.61誰が使っても同じようなコードかけるのがいいよね
Perlは難しいし書く人によってコードが変わりまくるし
変態的で比較的レベルの高い人じゃないと向いてないよ
0652デフォルトの名無しさん
2012/12/03(月) 18:29:59.58ある日「ひさしぶりに Perl を使おう」と思い立ち
$line = chomp($line);
と書いて、意図通り動かないことに気がついたとき
自分は Perl に向いていないと思った。
my とか bless とか、配列とかの不満よりも、
上記の1行コードでの失敗の方がおどろいた。
■ このスレッドは過去ログ倉庫に格納されています