トップページ⇒tech
993コメント322KB

Ruby 初心者スレッド Part 57©5ch.io [転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2015/03/12(木) 22:08:53.45ID:qh8O4P61
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、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:E78u8ziX
俺俺言語作れや
0233デフォルトの名無しさん2015/05/12(火) 20:14:26.86ID:uJjQzeKQ
>>230
ヒアドキュメントだと最初の行をその行じゃなく次の行の行頭から書けるという違いはある

>>231
JSONやYAMLとかほかの言語とかとあえて違う記述を可能にする理由が無かったんでしょ
それに個人的な感想としてはブロックみたいな雰囲気を出してるからそのままだと最後の行の値を返しそうにも見える
0234デフォルトの名無しさん2015/05/12(火) 21:32:28.16ID:T2eyCbcC
>>230
ヒアドキュメントはうっかり閉じてしまう確率が格段に低い。

>>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
>>234
さすがにうっかり閉じてしまうようなケースはエディタのハイライトで気づけると思うが…
それすらできないようなエディタは窓からポイーだろうし

俺も考えてみたけど、ヒアドキュメントは単純にPerlとかからもらってきたからあるだけで
そこまでメリット・デメリットを考えて導入されたものじゃない気がする

なのでそんな違いはないので好きな方を使っとけ、ってのが結論じゃないかと
0237デフォルトの名無しさん2015/05/12(火) 23:24:19.47ID:McgsoQJk
>>231
%W(aaa bbb ccc)
0238デフォルトの名無しさん2015/05/12(火) 23:33:39.43ID:avMjEYTK
文字列リテラルの間が空白類だと連結された一つの文字列になるんじゃなかったっけ?
空白類は改行も含む
0239デフォルトの名無しさん2015/05/13(水) 01:48:17.64ID:9i6gM8IV
>>230
>>231

ary = <<EOT.split
aaa
bbb
ccc
EOT

みたいに書けることは意外に知られていない気がする
0240デフォルトの名無しさん2015/05/13(水) 08:48:10.25ID:PDARsX4g
>>236
いちいちエスケープするの面倒だろ
ほぼそのまま書けるのがヒアドキュメントのメリット
0241デフォルトの名無しさん2015/05/13(水) 10:21:10.72ID:5w+SdhWJ
>>240
%記法ってのもあるんですが…
0242デフォルトの名無しさん2015/05/13(水) 17:31:25.41ID:/vC2Ckq+
PCを買い替えたのでrubyの環境構築していたのですが
Ruby2.2.2 にてbyebugのgemインストールにてdevkit入れろとエラーがでてしまいます
2.2系のDevkitが探しても無いようなのですが
まだないということでしょうか?
0243デフォルトの名無しさん2015/05/13(水) 18:35:35.64ID:AOVYLWkN
>242
こんなとこに書き込む暇があったら試せよ
0244デフォルトの名無しさん2015/05/13(水) 18:47:43.50ID:dkMaBjgg
>>242
Ruby 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
>243
ダウンロードページを少し読めばすぐ分かるようなことを簡単に教えちゃダメだって…。
初心者スレとはいえ、ここの住人は優しすぎると思うよ。
0246デフォルトの名無しさん2015/05/13(水) 19:21:24.94ID:peiJ2wcY
安価間違えたカコワルイ
0247デフォルトの名無しさん2015/05/20(水) 01:55:45.72ID:JquZNGcV
保守
0248デフォルトの名無しさん2015/05/20(水) 15:55:40.92ID:PrWBPEio
>>245

>>243は教えてないじゃん
初心者スレだと、installするのがやっとで、何日もかけて何とか成功する人もいるので。
0249243 245 2462015/05/20(水) 18:23:03.15ID:JDqrHdgv
安価間違えたって書いてるでしょ。

242はRuby使うのは初めてじゃなさそう(多分1.8 or 1.9からの乗り換え)だったから、もうちっと自分で調べろよ。
と言う思いで、突き放したレスをしたのよ。
2.2とDevkitは俺も使ってるから、Devkitが問題なく動くことは知ってたんだけどさ。

そもそも、ホントの初心者なら、WindowsでRubyを使うこと自体をお勧めしないのが親切なんじゃね?

ないしは、gemがきちんと整備されてる1.9系をまず使うように案内するとか。
0250デフォルトの名無しさん2015/05/20(水) 22:03:37.78ID:ptbOhCsA
1.9以降はみんなgithubで好き勝手に作ってて整備なんかされてない気がする
0251デフォルトの名無しさん2015/05/21(木) 15:30:14.61ID:GdS2dqGm
Rubyのリファレンスなどに出てくる「::」が何を表しているのかよくわかりません
例えばNokogiri::XML::NodeSetというのは何を表しているのですか?
親子関係なのかメソッド呼び出しによる返り値からさらにメソッドを呼び出してるのか……
::は一体なんなのですか?調べてもしっくりするものが出てきません
PHPであれば::はstaticのメソッドやプロパティにアクセスするための記号だなぁとわかるのですが。
手元にある「たのしいRuby」には「.」と「::」同じ意味と書いてありましたがどうもライブラリのリファレンスなどでは::と.を使い分けてるように感じます
0252デフォルトの名無しさん2015/05/21(木) 17:59:42.18ID:TIfvV/jT
>>251
http://melborne.github.io/2013/09/24/rubys-scope/
0253デフォルトの名無しさん2015/05/21(木) 19:12:10.92ID:GdS2dqGm
>>252
リンクありがとうございます
すごくわかりやすいです。助かりました感謝致します。
0254デフォルトの名無しさん2015/05/22(金) 21:21:58.30ID:6YiaeImK
Rakeでファイルがローカルにすでにあればそれを使って
なければwgetするタスクってないのん?
0255デフォルトの名無しさん2015/05/24(日) 19:53:45.34ID:BGt14oQU
rake単体でできない事もないがBundlerを使った方が簡単だろう
0256デフォルトの名無しさん2015/05/25(月) 21:09:31.82ID:bs/1Uzyk
curbで gem install curbは完了して
Curlで何か書こうかなーと思ったら
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:o6nCxH6o
とりあえずダブルクォーテーションの対応おかしくね
0258デフォルトの名無しさん2015/05/26(火) 01:24:33.10ID:w5o9scD7
なんでって、そうなるように書かれたから
0259デフォルトの名無しさん2015/05/26(火) 14:38:46.64ID:ty86ilJR
Mechanize::PageオブジェクトにあるメソッドをNokogiri::XML::NodeSetで使う方法はありますか?
0260デフォルトの名無しさん2015/05/26(火) 14:39:14.29ID:ty86ilJR
Mechanize::PageオブジェクトにあるメソッドをNokogiri::XML::NodeSetで使う方法はありますか?
0261デフォルトの名無しさん2015/05/27(水) 00:39:56.95ID:nI5vt9oP
Yes.
0262デフォルトの名無しさん2015/05/28(木) 15:47:34.95ID:o+E2fSxO
p '! 1 2 3'.scan(/(!)(\s\d)+/)
で
[['!', ' 1', ' 2', ' 3']]
ではなく
[['!', ' 3']]
になるのはなんで?
0263デフォルトの名無しさん2015/05/28(木) 16:17:58.51ID:4ci5OfPn
!と連続してるから当然だろ。
p '! 1 2 3'.scan(/\s?[!\d]/)
0264デフォルトの名無しさん2015/05/28(木) 16:24:26.00ID:DR5ziRfz
テスト
p '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'.scan(/(!)(\s\d)(\s\d)(\s\d)/)
なら
[["!", " 1", " 2", " 3"]]
なのにね

'! 1 2 3'.scan(/(!)(\s\d){3}/)
は
[["!", " 3"]]
0266デフォルトの名無しさん2015/05/28(木) 22:48:12.60ID:hjZS/GsK
いや, キャプチャを量指定子で繰り返したらキャプチャ対象なるのはキャプチャ部分に対する最後のマッチだけだろ(正規表現の一般論として)
0267デフォルトの名無しさん2015/05/28(木) 23:03:42.26ID:dLu0WU3T
繰り返し何回マッチしたかによってそれ以降のキャプチャを参照する番号が変わるなんてことになったらいやすぎる
0268デフォルトの名無しさん2015/05/28(木) 23:41:22.41ID:fjZg4KPN
>>266
それが結論のようですね

p '1234'.scan(/(.)/) #→ [["1"],[" 2"], [" 3"], [" 4"]]
p '1234'.scan(/(.)+/) #→ [[" 4"]]
0269デフォルトの名無しさん2015/06/01(月) 02:21:48.67ID:Y1SfGQAR
>>268
これと逆なんですけど

p "1234".slice(/./) # "1"
p "1234".slice(/.+/) # "1234"
0270デフォルトの名無しさん2015/06/01(月) 08:21:10.39ID:vSxmWzhu
それの何が問題なの
0271デフォルトの名無しさん2015/06/02(火) 00:28:30.61ID:8518yJU4
そりゃ逆に書いてるんだから逆になるだろ
0272デフォルトの名無しさん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
Railsの質問なのですが
<%= 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="&#x2713;" /></div>
...
</form>

指定したactionではないページが作成されてしまうのですが、このような場合なにか原因が考えられるでしょうか?
Windows
Ruby 2.1.5
Rails 4.2.1 を使用しています
0275デフォルトの名無しさん2015/06/02(火) 19:01:49.98ID:NaslPVjy
>274
【RoR】Ruby on Rails Part19
http://kanae.2ch.net/test/read.cgi/php/1409423461/
0276デフォルトの名無しさん2015/06/02(火) 22:00:34.98ID:jU2A440n
1 && 2がなんで1になるんでしょうか?
0277デフォルトの名無しさん2015/06/02(火) 22:17:04.91ID:w3ztcJiD
1 は真だから、2 は評価しない
偽は nil か false だけ
0278デフォルトの名無しさん2015/06/03(水) 00:13:17.86ID:JxGyv6Qf
irb(main):001:0> 1 && 2
=> 2
0279デフォルトの名無しさん2015/06/03(水) 00:31:54.34ID:0f9O3Aau
すいません、頭がごっちゃになってたみたいです

irb(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
「x && y」は結果が
真の時にyを
偽の時にxを
返すみたいだね。
0281デフォルトの名無しさん2015/06/03(水) 02:16:50.15ID:+cj40TuI
逆に x || y はxが真ならxの値を返す仕様です

これらの仕様はちょっとした条件分岐のイディオムとして使ったりする
多用すると糞コードだけど
0282デフォルトの名無しさん2015/06/03(水) 02:20:18.32ID:OhDMuo8z
&&も||も真偽が確定した時の値を返すってことだね
0283デフォルトの名無しさん2015/06/03(水) 16:48:17.14ID:bMkxvijs
>>280-282
知らなかった、これから使おう

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:tdUAPzML
&&は、且つ。||は、または。
x && yの場合、xがnot falseなら、次にyが評価される
x || yの場合、xがfalseなら、次にyが評価される。
&&、||ともに条件式の真偽値が確定した段階で評価を終了する
0285デフォルトの名無しさん2015/06/03(水) 17:27:47.57ID:mLaeXcpL
ruby は1/0 で true/faliseとしないが敢えて
 1 = 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:+cj40TuI
長い
3行にまとめろ
0287デフォルトの名無しさん2015/06/03(水) 23:24:11.35ID:ciz6E00S
話をややこしくするけど C とかだと && や || は 0 か 1 しか返さないから 1 && 2 とか 2 || 1 みたいなのも 1 になるんだよな
Ruby だとどっちも 2 になるのな

http://ideone.com/X28ve7
https://ideone.com/90E5kx
0288デフォルトの名無しさん2015/06/04(木) 07:10:03.19ID:/AL4RUwW
Perl 由来なんじゃない?
0289デフォルトの名無しさん2015/06/04(木) 07:45:29.82ID:UDpXUDZ8
Perlだと open or die とかやるよね
0290デフォルトの名無しさん2015/06/05(金) 02:46:17.56ID:vgtnI7Mx
>>288
OSSで配布されるshスクリプトを覗けばわかるけど、&&や||なんて幾らでも見かけるよ
こうい評価式に関しては、一度、schemeやelispを触ってからだと理解しやすいのかも
(and () ())
(or () ())
0291デフォルトの名無しさん2015/06/07(日) 20:56:05.84ID:tz2PkCph
2.2系でwebrickを一旦停止から再始動するのはどしたらいいの?
二回目の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
>>292
それではサービスが稼働しっぱなしなのでよろしくないのです
やりたいのは、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:jibIjF7D
自己解決 truncでfixしてた

https://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
文字列 "abxcd(exfgxhij)klmnxoxpq" で
かっこ内のxだけ削除する簡単な記法はありまでしょうか?

これまで "("でsplitして削除し、最後にjoin("(")を していました。
0296デフォルトの名無しさん2015/06/09(火) 02:37:13.31ID:d2G2JwTT
文字列が"abxcd(exfgxhij)klmnxoxpq"ってあらかじめ分かってるんだから
削除済みの文字列リテラルを書けばOK。
意図が分かりずらくなりそうならコメントに # かっこ内のxだけ削除 とか書けばよい。
0297デフォルトの名無しさん2015/06/09(火) 08:06:56.59ID:ms43utQc
>>296
どう曲解したら文字列が固定になるんだよ。頭弱いのか?それとも295を煽ってるつもりか?

295の提示した条件も曖昧過ぎだけどさ。
0298デフォルトの名無しさん2015/06/09(火) 09:23:17.40ID:wLd87YRu
>>295
こんな感じでどう?
str="abxcd(exfgxhij)klmnxoxpq"
puts str.gsub(/((?<=\().*(?=\)))/){|c| c.gsub(/x/,"")}
0299デフォルトの名無しさん2015/06/09(火) 09:26:34.41ID:ms43utQc
改めて読むとsplitとjoinで元に戻るということは、

■確定
・小カッコは1つのペアだけが必ずある。
・小カッコ中にxは2個発生する可能性がある。
・小カッコの前後にもxは発生する。

■不確定
・小カッコ中のxは2個以外発生するかも知れない。発生しないかも知れない。

・・・と思ったけど295のやり方だと、splitしたあとの"("後ろの文字列は
"exfgxhij)klmnxoxpq"
になる。これからxを消してしまうと")"の後ろのxも消えない?
0300デフォルトの名無しさん2015/06/09(火) 10:02:23.26ID:t6/3em7f
>>298
その正規表現において、先読み・後読みは不要

素直に /\(.*\)/ でOK
0301デフォルトの名無しさん2015/06/09(火) 10:20:24.51ID:wLd87YRu
>>300
本当だ。キャプチャするんだから必要ないですよねw
0302デフォルトの名無しさん2015/06/09(火) 12:04:23.81ID:J2H5hRFH
教えてください。

undefined 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
>>297-301
ありがとうございます。
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
>>304
その目的ならnokogiri を使った方がいい。
0306デフォルトの名無しさん2015/06/11(木) 05:38:31.92ID:PXBCUrWo
p %q(#{a+1})実行した時に、"#"の前に出力される"\"ってなぜ出力されるのですか?

irb(main):002:0> p %q(#{a+1})
"\#{a+1}"
=> "\#{a+1}"
0307デフォルトの名無しさん2015/06/11(木) 07:13:05.55ID:8bPOERyx
p は出力したものをそのままRubyに食わせてもいいように変換しているから(デバッグ用)
0308デフォルトの名無しさん2015/06/11(木) 07:16:43.23ID:FjLBTU+U
p '"'実行した時に、"の前に出力される\ってなぜ出力されるのですか?
ってのと同じこと。
0309デフォルトの名無しさん2015/06/11(木) 08:24:52.92ID:PXBCUrWo
>>308
p '"'の結果の\はエスケープ(?)って理解したのですが、
p '#'とした時に\が出力されないのって何でなんでしょうか?

irb(main):019:0> p '#'
"#"
=> "#"
0310デフォルトの名無しさん2015/06/11(木) 10:00:55.82ID:FjLBTU+U
#じゃなくて#{}などとして初めてエスケープする必要があるから
0311デフォルトの名無しさん2015/06/11(木) 10:28:19.32ID:FjLBTU+U
puts "#" #=> #
puts "#{1+2}" #=> 3
puts "\#{1+2}" #=> #{1+2}
これで分からない?
0312デフォルトの名無しさん2015/06/11(木) 11:47:30.61ID:PXBCUrWo
'#{'は'#'と'{'で別々じゃなくて、'#{'でまとめて処理すると理解しました。

irb(main):033:0> p '#{'
"\#{"
=> "\#{"
0313デフォルトの名無しさん2015/06/11(木) 12:03:09.64ID:PXBCUrWo
これで完全に理解しました

1. pメソッドはputsとinspectの機能を併せ持ったメソッド
2. inspectメソッドは制御文字や非アスキー文字をバックスラッシュ記法に置き換えた文字列を返すので
"#{"は"#{"に置き換わる
0314デフォルトの名無しさん2015/06/11(木) 12:17:34.48ID:FjLBTU+U
"#$foo", "#@foo", "#@@foo"なんかもあるけどね
0315デフォルトの名無しさん2015/06/11(木) 17:07:28.29ID:k6fmyMb0
ary = [1, 2, 2, 3, 4]
ary2 = Array.new

以上のようなaryって配列があったとしてここから2(数値)の位置を
ary2に入れる方法ってありますか?
ary2 << ary.find_index(2)だと1しか入りませんでした
この場合だと1,2が入っていてほしいのですが
0316デフォルトの名無しさん2015/06/11(木) 17:54:24.79ID:k6fmyMb0
>>315 ですが
ary.each_index.select{|i| ary[i] == 2}
で、できました
0317デフォルトの名無しさん2015/06/11(木) 23:29:37.65ID:tlYNnI/3
俺も昔同じ事したことある!って思って確かめてみたらずっと劣悪な方法だったww
0318デフォルトの名無しさん2015/06/12(金) 08:18:37.24ID:H4QZivGM
Rubyのような無駄に電力使う言語は使うべきではない
Rubyは人類の地球の敵
0319デフォルトの名無しさん2015/06/12(金) 10:18:54.09ID:Zv8/wash
と、無駄にサーバに負荷をかけているお前はより害悪
0320デフォルトの名無しさん2015/06/12(金) 11:20:08.67ID:X4ZGEAJo
Array.selectのブロック内部でary[i]とか使いたくないな

ary.map.with_index {|item, index| item == 2 ? index : nil }.compact

人それぞれ
0321デフォルトの名無しさん2015/06/13(土) 00:07:45.52ID:pXK4iExZ
ちなみに>>317で言った俺バージョンはこちら。

ary.each_with_index.reduce([]){|s, i| i[0] == arg ? s << i[1] : s}
0322デフォルトの名無しさん2015/06/13(土) 03:19:47.81ID:+mI+miZs
>>315 をみて、最初に思いついたやつ
ary.each_with_index.select{|a,b| a==2}.map(&:last)
0323デフォルトの名無しさん2015/06/13(土) 14:24:50.73ID:upMXSc0p
utf8が\nnnの8進数エスケープに変換されてしまっている時に
お手軽に元のutf8に戻すやり方はありますか?
0324デフォルトの名無しさん2015/06/13(土) 14:29:15.80ID:upMXSc0p
pythonだと
.decode('string_escape')
でできるみたいなんですが
rubyだとstring_escapeがないみたいです
0325デフォルトの名無しさん2015/06/13(土) 15:37:54.95ID:NUKk6CPY
pack/unpackじゃね
0326デフォルトの名無しさん2015/06/13(土) 18:23:37.62ID:upMXSc0p
gsub(/(\\\d{3})+/){|str| str.force_encoding("UTF-8").scrub}
みたいな感じでできることはできるんですが
irbで直接入力したら表示できるので
eval使ったりしてシンプルにならないかなぁと
0327デフォルトの名無しさん2015/06/13(土) 18:27:32.05ID:NUKk6CPY
ソースを書き換えたいの?
0328デフォルトの名無しさん2015/06/13(土) 18:37:21.84ID:upMXSc0p
すいません、書き方悪かったです
irb上で"\nnn"表記の文字列を評価すると
正しく日本語表示できるので
上に書いたみたいな直接的なやり方でなくて
eval使えないかなと思った次第です
0329デフォルトの名無しさん2015/06/14(日) 22:41:43.04ID:mX+deoEx
解決しました
普通にpなりputsなりするだけでokでした
0330デフォルトの名無しさん2015/06/15(月) 05:26:05.47ID:TKCLtNo1
x 書き方悪かった
o 頭が悪かった
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
賢い方にシンプルな方法を教えていただけると嬉しいです
■ このスレッドは過去ログ倉庫に格納されています