Ruby 初心者スレッド Part 57©5ch.io [転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2015/03/12(木) 22:08:53.45ID:qh8O4P61質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 55
http://peace.2ch.net/test/read.cgi/tech/1403361584/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
0232デフォルトの名無しさん
2015/05/12(火) 20:04:24.35ID:E78u8ziX0233デフォルトの名無しさん
2015/05/12(火) 20:14:26.86ID:uJjQzeKQヒアドキュメントだと最初の行をその行じゃなく次の行の行頭から書けるという違いはある
>>231
JSONやYAMLとかほかの言語とかとあえて違う記述を可能にする理由が無かったんでしょ
それに個人的な感想としてはブロックみたいな雰囲気を出してるからそのままだと最後の行の値を返しそうにも見える
0234デフォルトの名無しさん
2015/05/12(火) 21:32:28.16ID:T2eyCbcCヒアドキュメントはうっかり閉じてしまう確率が格段に低い。
>>231
そういう提案はある。
https://bugs.ruby-lang.org/issues/8956
https://bugs.ruby-lang.org/issues/10528
積極的に推し進める人がいないので話が進んでないみたいだけど
強い反対もなさそうなのでそのうち採用されるのかもね
0235デフォルトの名無しさん
2015/05/12(火) 22:30:23.97ID:UZCLQ5ym面倒に感じるほど配列をソース中に埋め込まなければならない
設計なんか見たら俺はリジェクトする
0236デフォルトの名無しさん
2015/05/12(火) 23:07:24.09ID:a39hBEOUさすがにうっかり閉じてしまうようなケースはエディタのハイライトで気づけると思うが…
それすらできないようなエディタは窓からポイーだろうし
俺も考えてみたけど、ヒアドキュメントは単純にPerlとかからもらってきたからあるだけで
そこまでメリット・デメリットを考えて導入されたものじゃない気がする
なのでそんな違いはないので好きな方を使っとけ、ってのが結論じゃないかと
0237デフォルトの名無しさん
2015/05/12(火) 23:24:19.47ID:McgsoQJk%W(aaa bbb ccc)
0238デフォルトの名無しさん
2015/05/12(火) 23:33:39.43ID:avMjEYTK空白類は改行も含む
0239デフォルトの名無しさん
2015/05/13(水) 01:48:17.64ID:9i6gM8IV>>231
ary = <<EOT.split
aaa
bbb
ccc
EOT
みたいに書けることは意外に知られていない気がする
0240デフォルトの名無しさん
2015/05/13(水) 08:48:10.25ID:PDARsX4gいちいちエスケープするの面倒だろ
ほぼそのまま書けるのがヒアドキュメントのメリット
0241デフォルトの名無しさん
2015/05/13(水) 10:21:10.72ID:5w+SdhWJ%記法ってのもあるんですが…
0242デフォルトの名無しさん
2015/05/13(水) 17:31:25.41ID:/vC2Ckq+Ruby2.2.2 にてbyebugのgemインストールにてdevkit入れろとエラーがでてしまいます
2.2系のDevkitが探しても無いようなのですが
まだないということでしょうか?
0243デフォルトの名無しさん
2015/05/13(水) 18:35:35.64ID:AOVYLWkNこんなとこに書き込む暇があったら試せよ
0244デフォルトの名無しさん
2015/05/13(水) 18:47:43.50ID:dkMaBjggRuby 2.0.0 and above: mingw64-32-4.7.2
Ruby 2.0.0 and above x64 (64bits): mingw64-64-4.7.2
って書いてあるから2.2.2でもいけるんじゃない?
0245デフォルトの名無しさん
2015/05/13(水) 19:20:26.79ID:peiJ2wcYダウンロードページを少し読めばすぐ分かるようなことを簡単に教えちゃダメだって…。
初心者スレとはいえ、ここの住人は優しすぎると思うよ。
0246デフォルトの名無しさん
2015/05/13(水) 19:21:24.94ID:peiJ2wcY0247デフォルトの名無しさん
2015/05/20(水) 01:55:45.72ID:JquZNGcV0248デフォルトの名無しさん
2015/05/20(水) 15:55:40.92ID:PrWBPEio>>243は教えてないじゃん
初心者スレだと、installするのがやっとで、何日もかけて何とか成功する人もいるので。
0249243 245 246
2015/05/20(水) 18:23:03.15ID:JDqrHdgv242はRuby使うのは初めてじゃなさそう(多分1.8 or 1.9からの乗り換え)だったから、もうちっと自分で調べろよ。
と言う思いで、突き放したレスをしたのよ。
2.2とDevkitは俺も使ってるから、Devkitが問題なく動くことは知ってたんだけどさ。
そもそも、ホントの初心者なら、WindowsでRubyを使うこと自体をお勧めしないのが親切なんじゃね?
ないしは、gemがきちんと整備されてる1.9系をまず使うように案内するとか。
0250デフォルトの名無しさん
2015/05/20(水) 22:03:37.78ID:ptbOhCsA0251デフォルトの名無しさん
2015/05/21(木) 15:30:14.61ID:GdS2dqGm例えばNokogiri::XML::NodeSetというのは何を表しているのですか?
親子関係なのかメソッド呼び出しによる返り値からさらにメソッドを呼び出してるのか……
::は一体なんなのですか?調べてもしっくりするものが出てきません
PHPであれば::はstaticのメソッドやプロパティにアクセスするための記号だなぁとわかるのですが。
手元にある「たのしいRuby」には「.」と「::」同じ意味と書いてありましたがどうもライブラリのリファレンスなどでは::と.を使い分けてるように感じます
0252デフォルトの名無しさん
2015/05/21(木) 17:59:42.18ID:TIfvV/jThttp://melborne.github.io/2013/09/24/rubys-scope/
0253デフォルトの名無しさん
2015/05/21(木) 19:12:10.92ID:GdS2dqGmリンクありがとうございます
すごくわかりやすいです。助かりました感謝致します。
0254デフォルトの名無しさん
2015/05/22(金) 21:21:58.30ID:6YiaeImKなければwgetするタスクってないのん?
0255デフォルトの名無しさん
2015/05/24(日) 19:53:45.34ID:BGt14oQU0256デフォルトの名無しさん
2015/05/25(月) 21:09:31.82ID:bs/1UzykCurlで何か書こうかなーと思ったら
ruby -e "$(curl -fsSL https://www.google.co.jp/")ってやったら
-e:1: `$(' is not allowed as a global variable name
ってなちゃって(´・ω・`)
curl --help は動くんだけどなんででしょー(´・ω・`)
Windows7 64bit Ruby2.2.2 コマンドプロンプトです。
スキルはdotinstall ruby半年前に全部見た程度です。
0257デフォルトの名無しさん
2015/05/25(月) 22:17:45.79ID:o6nCxH6o0258デフォルトの名無しさん
2015/05/26(火) 01:24:33.10ID:w5o9scD70259デフォルトの名無しさん
2015/05/26(火) 14:38:46.64ID:ty86ilJR0260デフォルトの名無しさん
2015/05/26(火) 14:39:14.29ID:ty86ilJR0261デフォルトの名無しさん
2015/05/27(水) 00:39:56.95ID:nI5vt9oP0262デフォルトの名無しさん
2015/05/28(木) 15:47:34.95ID:o+E2fSxOで
[['!', ' 1', ' 2', ' 3']]
ではなく
[['!', ' 3']]
になるのはなんで?
0263デフォルトの名無しさん
2015/05/28(木) 16:17:58.51ID:4ci5OfPnp '! 1 2 3'.scan(/\s?[!\d]/)
0264デフォルトの名無しさん
2015/05/28(木) 16:24:26.00ID:DR5ziRfzp '1 2 3 4'.scan(/\s\d/) #→ [" 2", " 3", " 4"]
p '1 2 3 4'.scan(/(\s\d)/) #→ [[" 2"], [" 3"], [" 4"]]
p '1 2 3 4'.scan(/(\s\d)+/) #→ [[" 4"]]
p '1 2 3 4'.scan(/\s?\d/) #→ ["1", " 2", " 3", " 4"]
0265デフォルトの名無しさん
2015/05/28(木) 22:21:18.81ID:k3niE8s3なら
[["!", " 1", " 2", " 3"]]
なのにね
'! 1 2 3'.scan(/(!)(\s\d){3}/)
は
[["!", " 3"]]
0266デフォルトの名無しさん
2015/05/28(木) 22:48:12.60ID:hjZS/GsK0267デフォルトの名無しさん
2015/05/28(木) 23:03:42.26ID:dLu0WU3T0268デフォルトの名無しさん
2015/05/28(木) 23:41:22.41ID:fjZg4KPNそれが結論のようですね
p '1234'.scan(/(.)/) #→ [["1"],[" 2"], [" 3"], [" 4"]]
p '1234'.scan(/(.)+/) #→ [[" 4"]]
0269デフォルトの名無しさん
2015/06/01(月) 02:21:48.67ID:Y1SfGQARこれと逆なんですけど
p "1234".slice(/./) # "1"
p "1234".slice(/.+/) # "1234"
0270デフォルトの名無しさん
2015/06/01(月) 08:21:10.39ID:vSxmWzhu0271デフォルトの名無しさん
2015/06/02(火) 00:28:30.61ID:8518yJU40272デフォルトの名無しさん
2015/06/02(火) 01:32:52.01ID:YSKGxbzH+があると出力が少なくなる場合と多くなる場合があったのを発見
0273デフォルトの名無しさん
2015/06/02(火) 02:36:26.27ID:Im+YEyTj意味不
0274デフォルトの名無しさん
2015/06/02(火) 18:15:19.46ID:vepkkYh3<%= form_tag({controller: 'ajax', action: 'result'}, remote:true) do %>
...
<% end %>
上記form_tagを実行した場合
<form accept-charset="UTF-8" action="/ajax" data-remote="true" method="post">
<div style="display:none"><input name="utf8" type="hidden" value="✓" /></div>
...
</form>
指定したactionではないページが作成されてしまうのですが、このような場合なにか原因が考えられるでしょうか?
Windows
Ruby 2.1.5
Rails 4.2.1 を使用しています
0275デフォルトの名無しさん
2015/06/02(火) 19:01:49.98ID:NaslPVjy【RoR】Ruby on Rails Part19
http://kanae.2ch.net/test/read.cgi/php/1409423461/
0276デフォルトの名無しさん
2015/06/02(火) 22:00:34.98ID:jU2A440n0277デフォルトの名無しさん
2015/06/02(火) 22:17:04.91ID:w3ztcJiD偽は nil か false だけ
0278デフォルトの名無しさん
2015/06/03(水) 00:13:17.86ID:JxGyv6Qf=> 2
0279デフォルトの名無しさん
2015/06/03(水) 00:31:54.34ID:0f9O3Aauirb(main):001:0> 2 && 1
=> 1
irb(main):002:0> 1 && 2
=> 2
x && yは、xが真ならyの値を返す仕様と理解しました
0280デフォルトの名無しさん
2015/06/03(水) 02:16:48.51ID:OhDMuo8z真の時にyを
偽の時にxを
返すみたいだね。
0281デフォルトの名無しさん
2015/06/03(水) 02:16:50.15ID:+cj40TuIこれらの仕様はちょっとした条件分岐のイディオムとして使ったりする
多用すると糞コードだけど
0282デフォルトの名無しさん
2015/06/03(水) 02:20:18.32ID:OhDMuo8z0283デフォルトの名無しさん
2015/06/03(水) 16:48:17.14ID:bMkxvijs知らなかった、これから使おう
x=false
y=true
p x && y #false
p y && x #false
p x || y #true
p y || x #true
0284デフォルトの名無しさん
2015/06/03(水) 17:03:31.76ID:tdUAPzMLx && yの場合、xがnot falseなら、次にyが評価される
x || yの場合、xがfalseなら、次にyが評価される。
&&、||ともに条件式の真偽値が確定した段階で評価を終了する
0285デフォルトの名無しさん
2015/06/03(水) 17:27:47.57ID:mLaeXcpL1 = true = 真
0 = false = 偽
で説明
ttp://upload.wikimedia.org/wikipedia/ja/7/7b/Venn-Diagram-AND.png
【論理積 / AND演算 / &&】
1 x 1 = 1
1 x 0 = 0
0 x 1 = 0
0 x 0 = 0
積ってある通り、両方とも 1 でないと 1 にはならない。逆に言うと片方が 0 なら 0 だ。
ttp://upload.wikimedia.org/wikipedia/ja/5/5e/Venn-Diagram-OR.png
【論理和 / OR演算 / ||】
1 + 1 = 1 ← まぁ 0 ではないよって事w
1 + 0 = 1
0 + 1 = 1
0 + 0 = 0
和ってある通り、両方とも 0 でないと 0 にならない。逆に言うと片方が 1 なら 1 だ。
で >>282 の指摘通り
A && B はAが偽ならBがどうだろうと全体で偽が確定なのでBは評価(実行)せず
A || B はAが真ならBがどうだろうと全体で真が確定なのでBは評価(実行)せず
・・・わかりづらいかw
0286デフォルトの名無しさん
2015/06/03(水) 20:59:25.70ID:+cj40TuI3行にまとめろ
0287デフォルトの名無しさん
2015/06/03(水) 23:24:11.35ID:ciz6E00SRuby だとどっちも 2 になるのな
http://ideone.com/X28ve7
https://ideone.com/90E5kx
0288デフォルトの名無しさん
2015/06/04(木) 07:10:03.19ID:/AL4RUwW0289デフォルトの名無しさん
2015/06/04(木) 07:45:29.82ID:UDpXUDZ80290デフォルトの名無しさん
2015/06/05(金) 02:46:17.56ID:vgtnI7MxOSSで配布されるshスクリプトを覗けばわかるけど、&&や||なんて幾らでも見かけるよ
こうい評価式に関しては、一度、schemeやelispを触ってからだと理解しやすいのかも
(and () ())
(or () ())
0291デフォルトの名無しさん
2015/06/07(日) 20:56:05.84ID:tz2PkCph二回目のstartで例外が起きてしまうんだけど
環境は ASR 2.2.0 Win7(32) / 2.2.2 Freebsd11(64) / 2.2.[0-2] Ubuntu14.04(64)
require 'webrick'
s = WEBrick::HTTPServer.new
Thread.new { sleep 2; s.stop }
s.start
Thread.new { sleep 2; s.shutdown }
s.start
puts 'Success'
<<エラーログ>>
[2015-06-07 20:37:27] ERROR NoMethodError: undefined method `[]' for nil:NilClass
/opt/rubies/2.2.2/lib/ruby/2.2.0/webrick/server.rb:174:in `block in start'
.<2050 回リピート>
/opt/rubies/2.2.2/lib/ruby/2.2.0/webrick/server.rb:333:in `cleanup_shutdown_pipe': undefined method `each' for nil:NilClass (NoMethodError)
from /opt/rubies/2.2.2/lib/ruby/2.2.0/webrick/server.rb:202:in `block in start'
from /opt/rubies/2.2.2/lib/ruby/2.2.0/webrick/server.rb:32:in `start'
from /opt/rubies/2.2.2/lib/ruby/2.2.0/webrick/server.rb:162:in `start'
from /tmp/web.rb:9:in `<main>'
0292デフォルトの名無しさん
2015/06/08(月) 01:34:35.25ID:mgWlS5+H['INT', 'TERM'].each{|i| Signal.trap(i){puts"Hello, world!"}}
とかじゃダメなのかな
0293デフォルトの名無しさん
2015/06/08(月) 04:20:13.36ID:jibIjF7Dそれではサービスが稼働しっぱなしなのでよろしくないのです
やりたいのは、webrickを生かしたままで任意の時点で改造すること
弄っている最中はなるべくリクエストを受けたくないわけでして
Rubyを使わずファイヤーウォールで止める手もあるけれども……
それと停止とはどういう状態なのか分かってなかったので軽く調べてみた
netstat と telnetで観察してみるとこんな感じ
2.2: stop時 port closed 接続確立不能
再開後 例外発生
2.1: stop時 port lisning 接続確立可能 リクエスト送信可能
再開後 受信キューに貯まったリクエストを取得し、応答を開始
もしや2.2はlisten portを閉じてるから、再startでaccept出来なくなってる?
0294デフォルトの名無しさん
2015/06/08(月) 14:20:56.48ID:jibIjF7Dhttps://bugs.ruby-lang.org/issues/10956
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/webrick/server.rb?r1=49101&r2=49917
0295デフォルトの名無しさん
2015/06/09(火) 00:26:22.45ID:X2ZYuZ0Vかっこ内のxだけ削除する簡単な記法はありまでしょうか?
これまで "("でsplitして削除し、最後にjoin("(")を していました。
0296デフォルトの名無しさん
2015/06/09(火) 02:37:13.31ID:d2G2JwTT削除済みの文字列リテラルを書けばOK。
意図が分かりずらくなりそうならコメントに # かっこ内のxだけ削除 とか書けばよい。
0297デフォルトの名無しさん
2015/06/09(火) 08:06:56.59ID:ms43utQcどう曲解したら文字列が固定になるんだよ。頭弱いのか?それとも295を煽ってるつもりか?
295の提示した条件も曖昧過ぎだけどさ。
0298デフォルトの名無しさん
2015/06/09(火) 09:23:17.40ID:wLd87YRuこんな感じでどう?
str="abxcd(exfgxhij)klmnxoxpq"
puts str.gsub(/((?<=\().*(?=\)))/){|c| c.gsub(/x/,"")}
0299デフォルトの名無しさん
2015/06/09(火) 09:26:34.41ID:ms43utQc■確定
・小カッコは1つのペアだけが必ずある。
・小カッコ中にxは2個発生する可能性がある。
・小カッコの前後にもxは発生する。
■不確定
・小カッコ中のxは2個以外発生するかも知れない。発生しないかも知れない。
・・・と思ったけど295のやり方だと、splitしたあとの"("後ろの文字列は
"exfgxhij)klmnxoxpq"
になる。これからxを消してしまうと")"の後ろのxも消えない?
0300デフォルトの名無しさん
2015/06/09(火) 10:02:23.26ID:t6/3em7fその正規表現において、先読み・後読みは不要
素直に /\(.*\)/ でOK
0301デフォルトの名無しさん
2015/06/09(火) 10:20:24.51ID:wLd87YRu本当だ。キャプチャするんだから必要ないですよねw
0302デフォルトの名無しさん
2015/06/09(火) 12:04:23.81ID:J2H5hRFHundefined method `cache' for Gem:Module (NoMethodError)
とエラーが出ます。
gem install cacheとインストール済みのはずです。
よろしくお願いします。
0303デフォルトの名無しさん
2015/06/09(火) 21:31:19.67ID:d2G2JwTTあえて的外れな答を提示しておいて反論として正答を引き出すのが狙いだ
0304デフォルトの名無しさん
2015/06/09(火) 21:43:45.71ID:+VzixiOxありがとうございます。
gsub(/ /){|c| c.gsub(/x/,"")}
でトライしてみます。 そんなやり方があるのを知りませんでした。
じっさいは htmlソース中の <a ..> のカギ括弧内から
不要な要素を削り、必要な要素(たとえばhref)だけを残すすっきりした書き方がわからなかったからでした。
例
<a title="**" href="http://**"target="** rel="**" class='**' onmouseout="**">
>>299
>これからxを消してしまうと")"の後ろのxも消えない?
ありゃ、そうでした、バグでした。
0305デフォルトの名無しさん
2015/06/10(水) 05:45:48.97ID:T+RB9DK5その目的ならnokogiri を使った方がいい。
0306デフォルトの名無しさん
2015/06/11(木) 05:38:31.92ID:PXBCUrWoirb(main):002:0> p %q(#{a+1})
"\#{a+1}"
=> "\#{a+1}"
0307デフォルトの名無しさん
2015/06/11(木) 07:13:05.55ID:8bPOERyx0308デフォルトの名無しさん
2015/06/11(木) 07:16:43.23ID:FjLBTU+Uってのと同じこと。
0309デフォルトの名無しさん
2015/06/11(木) 08:24:52.92ID:PXBCUrWop '"'の結果の\はエスケープ(?)って理解したのですが、
p '#'とした時に\が出力されないのって何でなんでしょうか?
irb(main):019:0> p '#'
"#"
=> "#"
0310デフォルトの名無しさん
2015/06/11(木) 10:00:55.82ID:FjLBTU+U0311デフォルトの名無しさん
2015/06/11(木) 10:28:19.32ID:FjLBTU+Uputs "#{1+2}" #=> 3
puts "\#{1+2}" #=> #{1+2}
これで分からない?
0312デフォルトの名無しさん
2015/06/11(木) 11:47:30.61ID:PXBCUrWoirb(main):033:0> p '#{'
"\#{"
=> "\#{"
0313デフォルトの名無しさん
2015/06/11(木) 12:03:09.64ID:PXBCUrWo1. pメソッドはputsとinspectの機能を併せ持ったメソッド
2. inspectメソッドは制御文字や非アスキー文字をバックスラッシュ記法に置き換えた文字列を返すので
"#{"は"#{"に置き換わる
0314デフォルトの名無しさん
2015/06/11(木) 12:17:34.48ID:FjLBTU+U0315デフォルトの名無しさん
2015/06/11(木) 17:07:28.29ID:k6fmyMb0ary2 = Array.new
以上のようなaryって配列があったとしてここから2(数値)の位置を
ary2に入れる方法ってありますか?
ary2 << ary.find_index(2)だと1しか入りませんでした
この場合だと1,2が入っていてほしいのですが
0316デフォルトの名無しさん
2015/06/11(木) 17:54:24.79ID:k6fmyMb0ary.each_index.select{|i| ary[i] == 2}
で、できました
0317デフォルトの名無しさん
2015/06/11(木) 23:29:37.65ID:tlYNnI/30318デフォルトの名無しさん
2015/06/12(金) 08:18:37.24ID:H4QZivGMRubyは人類の地球の敵
0319デフォルトの名無しさん
2015/06/12(金) 10:18:54.09ID:Zv8/wash0320デフォルトの名無しさん
2015/06/12(金) 11:20:08.67ID:X4ZGEAJoary.map.with_index {|item, index| item == 2 ? index : nil }.compact
人それぞれ
0321デフォルトの名無しさん
2015/06/13(土) 00:07:45.52ID:pXK4iExZary.each_with_index.reduce([]){|s, i| i[0] == arg ? s << i[1] : s}
0322デフォルトの名無しさん
2015/06/13(土) 03:19:47.81ID:+mI+miZsary.each_with_index.select{|a,b| a==2}.map(&:last)
0323デフォルトの名無しさん
2015/06/13(土) 14:24:50.73ID:upMXSc0pお手軽に元のutf8に戻すやり方はありますか?
0324デフォルトの名無しさん
2015/06/13(土) 14:29:15.80ID:upMXSc0p.decode('string_escape')
でできるみたいなんですが
rubyだとstring_escapeがないみたいです
0325デフォルトの名無しさん
2015/06/13(土) 15:37:54.95ID:NUKk6CPY0326デフォルトの名無しさん
2015/06/13(土) 18:23:37.62ID:upMXSc0pみたいな感じでできることはできるんですが
irbで直接入力したら表示できるので
eval使ったりしてシンプルにならないかなぁと
0327デフォルトの名無しさん
2015/06/13(土) 18:27:32.05ID:NUKk6CPY0328デフォルトの名無しさん
2015/06/13(土) 18:37:21.84ID:upMXSc0pirb上で"\nnn"表記の文字列を評価すると
正しく日本語表示できるので
上に書いたみたいな直接的なやり方でなくて
eval使えないかなと思った次第です
0329デフォルトの名無しさん
2015/06/14(日) 22:41:43.04ID:mX+deoEx普通にpなりputsなりするだけでokでした
0330デフォルトの名無しさん
2015/06/15(月) 05:26:05.47ID:TKCLtNo1o 頭が悪かった
0331デフォルトの名無しさん
2015/06/15(月) 08:28:37.66ID:f/UEz8h4結局、以下のような感じで無理やりやってます
str.gsub(/((\\\d{3})+)/) do
$1[1..-1].split("\\").map{|b| b.to_i(8)}.pack("C*").force_encoding("UTF-8").scrub
end
賢い方にシンプルな方法を教えていただけると嬉しいです
■ このスレッドは過去ログ倉庫に格納されています