Ruby 初心者スレッド Part 59 [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2016/10/02(日) 16:50:38.72ID:kFeo4TbM質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 58
http://echo.2ch.net/test/read.cgi/tech/1458735404/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
0002デフォルトの名無しさん
2016/10/02(日) 16:51:40.26ID:kFeo4TbMEffective Ruby、2015
メタプログラミング Ruby 第2版、2015
Rubyのしくみ、2014
改訂3版 基礎 Ruby on Rails、黒田努・佐藤和人、2015
リファクタリング:Rubyエディション、2010
0003デフォルトの名無しさん
2016/10/02(日) 18:17:48.09ID:mO5jHYyTRuby界隈から、名著が出た。
著者は「プログラミングRuby」のDave Thomas。
関数型言語Elixirは、Ruby + Rails + ErlangVM で、並行処理が得意
Selenium実践入門 ―― 自動化による継続的なブラウザテスト、2016
Seleniumデザインパターン&ベストプラクティス、2015
OSSのブラウザ自動テストツール、Selenium WebDriver を使って、
Rubyでテストを書いた本
プログラマ脳を鍛える数学パズル
シンプルで高速なコードが書けるようになる70問、増井 敏克、2015
CodeIQに掲載された問題を、Ruby, JSなどで解説
「ITエンジニアに読んでほしい!技術書・ビジネス書 大賞(ITエンジニア本大賞)」の受賞作
0004デフォルトの名無しさん
2016/10/02(日) 18:43:05.77ID:QvMQ+uX00005デフォルトの名無しさん
2016/10/02(日) 22:05:08.76ID:mO5jHYyTWindows Subsystem for Linux (WSL) で、Ruby, Rails をやっている人いる? 調子はどう?
apt-get で、パッケージもインストールできる
日本語も使える端末、ConEmu。
GUI表示用のXサーバー、Xming X Server for Windows
0006デフォルトの名無しさん
2016/10/03(月) 07:31:26.25ID:Sy28Ke7BWin対応はRubyのお荷物になってるから、
これを機にWin関連のコードがRuby本体やGemsから一掃されてくれるといいな
0007デフォルトの名無しさん
2016/10/03(月) 10:44:03.35ID:GNQlIOXR0008デフォルトの名無しさん
2016/10/03(月) 17:50:44.12ID:BQDt10lP自分で調べたんだけど下のであってる?
・今はlarskanis/openglとvaiorabbit/ruby-openglがある
・larskanis/openglのほうは(vaiorabbit/ruby-openglのドキュメント読むと)opengl2とかよばれている
・opengl2表記から初代opengl(既に開発停止、サイトもなくなっている)が存在する
0009デフォルトの名無しさん
2016/10/03(月) 17:52:09.82ID:BQDt10lP0010デフォルトの名無しさん
2016/10/04(火) 20:13:20.14ID:BihL0/mMruby側で「メモリ確保してポインター渡す」にはどうすればいいの?
0011デフォルトの名無しさん
2016/10/04(火) 22:52:38.60ID:1BCIDfGo少なくともWin対応完全終了の口実としては十分なレベルだなこれ
0012デフォルトの名無しさん
2016/10/05(水) 06:20:29.41ID:JVWzXY3Aどんなに嫌ってる人がいようと続いていく
0013デフォルトの名無しさん
2016/10/05(水) 14:43:41.37ID:e2s2BqVLffi
0014デフォルトの名無しさん
2016/10/06(木) 01:25:08.92ID:b/FSG7/Swin7-64bit
ruby-2.2.4(32bit)とruby-2.3.1(32bit)をrbenvを使って二つインストールしてる
数日前から2.3.1の方でgemのアップデートやインストールをしようとすると
Updating installed gems
ERROR: While executing gem ... (Gem::RemoteFetcher::FetchError)
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certif
icate verify failed (https://api.rubygems.org/specs.4.8.gz)
こんなエラーがでて、上手くいかない
2.2.4の方に切り替えるとアップデートやインストールが上手くいく
正直どこ弄れば良いかさっぱりだわ
0015デフォルトの名無しさん
2016/10/06(木) 01:28:43.41ID:EykuvLuN0016デフォルトの名無しさん
2016/10/06(木) 01:37:19.84ID:b/FSG7/S2.2.4の方が2.6.7、2.3.1の方が2.5.1でした
古いのが原因かと思ってgem update --systemを試しましたが同じくSSLのエラーを吐いてダメでした……
0017デフォルトの名無しさん
2016/10/06(木) 12:40:09.87ID:4kR5N43KWindowsで無理にrbenv使う意味がわからん
0018デフォルトの名無しさん
2016/10/06(木) 16:10:34.56ID:EykuvLuNRuby 2.2.4 の方の gem を 2.5.1 にして比較してみては?
0019デフォルトの名無しさん
2016/10/06(木) 18:27:59.15ID:TUUHw8QE以下参照して
http://d.hatena.ne.jp/komiyak/20130508/1367993536
0020デフォルトの名無しさん
2016/10/06(木) 23:45:09.75ID:80e57pGocronでrubyを動かすと、下記エラーが出てしまうのですが、
どう書けば良いのでしょうか?
また、なぜcronだとエラーしてしまうのでしょうか?
/hoge/nokogiri.rb: line 4: syntax error near unexpected token `('
/hoge/nokogiri.rb: line 4: `ENV['SSL_CERT_FILE']=File.expand_path(File.dirname(__FILE__)+
0021デフォルトの名無しさん
2016/10/07(金) 01:04:31.76ID:yL88npXy0022デフォルトの名無しさん
2016/10/07(金) 18:41:40.46ID:CUba1Zl4返事が遅くなったけど、ありがとう
0023デフォルトの名無しさん
2016/10/09(日) 16:23:29.55ID:+q97XIginokogiriっての使いたいんだけど gem install nokogiriってうっても変なエラーでるだけなんだけど
0024デフォルトの名無しさん
2016/10/09(日) 16:29:26.13ID:zS2VLXB8人生諦めが肝心
0025デフォルトの名無しさん
2016/10/09(日) 16:37:40.41ID:+q97XIgi0026デフォルトの名無しさん
2016/10/09(日) 17:08:11.44ID:+q97XIgi0027デフォルトの名無しさん
2016/10/09(日) 17:09:47.41ID:+q97XIgi0028デフォルトの名無しさん
2016/10/09(日) 17:29:16.41ID:ztakSrvWと打っても*** REMOTE GEMS ***
だけしか出てこないんですけど
みなさん同じ症状ですか?
それとも私だけでしょうか?
0029デフォルトの名無しさん
2016/10/09(日) 18:12:12.28ID:okPyT/Vt$ gem install rubygems-update --source http://rubygems.org/
$ update_rubygems
$ gem search -r nokogiri
0030デフォルトの名無しさん
2016/10/11(火) 10:02:56.75ID:/UUIzz58rubyでも同じようなライブラリ作成したら、同じになる?
それとも言語仕様のそもそもの違いで無理なの?
rubyならなんでも出来そう、かつ楽な書き方が出来そうな気がするんだけど
0031デフォルトの名無しさん
2016/10/11(火) 12:03:30.19ID:aUckxkie0032デフォルトの名無しさん
2016/10/11(火) 22:02:35.19ID:gtjckSki0033デフォルトの名無しさん
2016/10/12(水) 13:13:10.27ID:2jtU3Zlsどちらもそんなに違い出なさそうに見えるけど実際はどうなんだろ
やっぱりそれぞれ書くのが難しい部分とかある?
0034デフォルトの名無しさん
2016/10/12(水) 15:25:05.17ID:lA7OeQ/m金になる商売はむずかしいむずかしい言われるもんなんだろ
0035デフォルトの名無しさん
2016/10/12(水) 17:14:15.29ID:Kt1Sq3SLapple_price=[2, 6, 7, 13, 6, 20]
puts "#{fruits[0]}_price"[4]
上のコードでapple_price[4]の要素6を取り出したいのですが、"e"が表示されます。これは"apple_price"という文字列の
5番目を見ている、というのは理解できます。6を表示させるにはどうすればよいのでしょうか。よろしくお願いします。
0036デフォルトの名無しさん
2016/10/12(水) 17:41:20.38ID:m4XsbzZB6を表示するだけならputs eval("#{fruits[0]}_price")[4]
0037デフォルトの名無しさん
2016/10/12(水) 19:02:48.90ID:Kt1Sq3SLちょっと、今ググってみると、「「eval」は、Rubyの文字列を評価するメソッドです。」とあり、
評価するという意味が分かりませんが、とにかく文字列をつなげて“配列名”として扱える
ことができるのはわかりました。
なんでこんな妙なこと?をしているのかというと、配列名がすさまじく増えてきた上に、長くなってきて
見苦しくなってきたので、配列名の単語リスト配列を作成してその配列から番号で拾ってきてつなげれば
短くなって済むじゃんという動機でした。ところが、それらの文字がうまくつながらないので困っていた次第です。
とにかく、ありがとうございました。もうちょっと調べてみます。
0038デフォルトの名無しさん
2016/10/12(水) 19:15:43.53ID:5MBS+YlH0039デフォルトの名無しさん
2016/10/12(水) 19:16:58.95ID:AoMg70NU0040デフォルトの名無しさん
2016/10/12(水) 20:26:38.78ID:Kt1Sq3SLただの文字列だけど、eval("#{fruits[0]}_price")することによって、配列名としての役割をもたせられた?
というわけですね。要するに二次嫁を実際に動かすメソッドというわけですよね。
なんてすごいんだ。これからはこれを使いまくろう。素晴らしいものを教えていただきありがとうございました。
ハッシュは書くのがめんどくさいので、これにします。でも情報ありがとうございました。
0041デフォルトの名無しさん
2016/10/12(水) 20:38:17.90ID:9oDwxE2X0042デフォルトの名無しさん
2016/10/12(水) 21:18:02.32ID:golIGFQa0043デフォルトの名無しさん
2016/10/12(水) 22:38:29.15ID:nShtFhcR0044デフォルトの名無しさん
2016/10/13(木) 09:04:29.36ID:1bl1DIi2hashは配列を変換しても作れるし、多次元配列を使ったとしても
evalとか使うよりもよほど簡潔に書けると思うが。
0045デフォルトの名無しさん
2016/10/13(木) 11:10:37.62ID:a7epO2oPperlのときにも同じ展開を聴いた覚えがある
0046デフォルトの名無しさん
2016/10/13(木) 18:51:51.44ID:bdwv69IAわかりました、もうちょっと勉強します。
あとevalについて調べてみましたが、なんだか多用するようなメソッドじゃないみたいです。ただ、こんな
強力なメソッドがあることを知ることができたのは大きな収穫でした。
0047デフォルトの名無しさん
2016/10/13(木) 19:08:12.98ID:Xwk5OgLP0048デフォルトの名無しさん
2016/10/14(金) 01:49:18.02ID:lTvGl+LIrubyで自分のフォロワー一覧、あと自分のフォロワーがそれぞれフォローしてる人を一覧で得たいんですが、どうコードを書けばいいでしょうか?
rubyのバージョンは2.3.1です。
client.updateを使ってツイートを投稿することはできました。
0049デフォルトの名無しさん
2016/10/14(金) 07:05:19.57ID:xv7XrH2t英語読む気ないなら諦めましょう
0050デフォルトの名無しさん
2016/10/14(金) 14:11:08.06ID:4bSlGLeLhttps://syncer.jp/twitter-api-matome
エンドポイントの一覧の、
ユーザー間の関係・フォロー・フォロワー、あたりを参照
0051デフォルトの名無しさん
2016/10/16(日) 20:26:06.98ID:/verdR3zライブラリ、モジュール、クラスやメソッドのソースコードを
表示したり、そのソースのファイルパスを返すメソッドがあったら
便利じゃない?
そういうメソッドあるのかな。
0052デフォルトの名無しさん
2016/10/16(日) 20:45:49.85ID:bFWPoPH40053デフォルトの名無しさん
2016/10/16(日) 22:04:09.40ID:B0JyF1+C0054デフォルトの名無しさん
2016/10/17(月) 04:13:11.14ID:G5XuU76Kここを参考にして、
SDL::Event#mouse_x
でマウスのx座標を取得しようとしたら#より右側がコメントアウト扱いになってしまう
解決策をおしえてください
0055デフォルトの名無しさん
2016/10/17(月) 05:37:21.81ID:xsBX/OJBそれが出てくるってことは重症だ
君の使ってるRubyの参考書のRubyのインスタンスメソッドの説明はどうなってる
0056デフォルトの名無しさん
2016/10/17(月) 06:27:05.93ID:9oMVPCEa# を、.(ドット)に変えれば、どうなる?
0057デフォルトの名無しさん
2016/10/17(月) 09:51:34.36ID:PK8gee680058デフォルトの名無しさん
2016/10/17(月) 12:43:13.80ID:/xEkgA1M0059デフォルトの名無しさん
2016/10/17(月) 12:47:09.09ID:O9P4o+SCとっても
0060デフォルトの名無しさん
2016/10/17(月) 12:56:06.33ID:wcVEram7流れによっては if + 否定的条件 であえて書くときもある
なんでもかんでも機械的にunlessに置き換えれば好ましいというわけでもない
0061デフォルトの名無しさん
2016/10/17(月) 13:10:36.28ID:/xEkgA1Mというかrailsのためだけにrubyを覚えようと思っているぐらいなので極めるつもりはないですけど
0062デフォルトの名無しさん
2016/10/17(月) 13:25:44.82ID:8eStTtOD0063デフォルトの名無しさん
2016/10/17(月) 14:17:13.45ID:4xjyqR1Pbundlerだとプロジェクトごと管理されてしまうので使いまわせませんよね
0064デフォルトの名無しさん
2016/10/19(水) 17:08:04.64ID:6/Oyo1ylすいか→からす のようにしりとりの正誤を
判定するプログラムを作りたい。
実行する時に「ruby 〜.rb すいか からす」
のように2つの言葉を入れて実行させると
エラーが出てしまう。
str1=すいか、str2=からすと指定すれば
上手くいくのだけど…
何が間違っているのか教えてください
def judge(str1,str2)
if str1.reverse[0] == str2[0] then
return true
else
return false
end
end
##############
str1 = ARGV[0]
str2 = ARGV[1]
p judge(str1,str2)
0065デフォルトの名無しさん
2016/10/19(水) 17:36:03.73ID:yr0BTWsi引数が1つだとうまくいくのか?
エラーが出る場合は環境とどんなエラーが出たかも書かないと。
0066デフォルトの名無しさん
2016/10/19(水) 17:42:23.59ID:6/Oyo1ylif文のところに
undefine method '[]' for nilというエラーが。
0067デフォルトの名無しさん
2016/10/19(水) 17:45:20.12ID:QoKZwwi3標準入力のエンコーディングが変なことになってる環境でreverseが文字単位にならないと推測
rubyのバージョンと実行環境
0068デフォルトの名無しさん
2016/10/19(水) 17:56:18.75ID:yr0BTWsip ARGVだけにしたら何が出る?
0069デフォルトの名無しさん
2016/10/19(水) 18:19:16.64ID:4/E1zdGSstr1.reverse[0] は str1[-1] で十分でしょ。
def judge(str1,str2); str1[-1]==str2[0]; end
>str1=すいか、str2=からすと指定すれば
これがエラーにならないのが、むしろ謎。
0070デフォルトの名無しさん
2016/10/19(水) 18:31:10.49ID:6gjRUSSv↓
reverse.rb:2:in 'judge' : undefine method '[]' for nil : NilClass (NoMethodError)
from reverse.rb:13:in '<main>'というエラー
ARGVのみにしてもエラーが出る
0071デフォルトの名無しさん
2016/10/19(水) 19:12:58.53ID:r8TZ1Dhrp ARGV
を実行してみたら?
コマンドライン行のコピーと結果の貼り付けも忘れずに
0072デフォルトの名無しさん
2016/10/19(水) 19:19:47.78ID:I4oLsIwodef judge(str1,str2)
str1.reverse[0] == str2[0]
end
def judge2(str1,str2)
str1.chars[-1] == str2.chars[0]
end
def judge3(str1,str2)
str1.chomp.split(//)[-1] == str2.chomp.split(//)[0]
end
def f(a, b)
[a, b, judge(a, b), judge2(a, b), judge3(a, b)]
end
p f("すいか", "からす")
p f(ARGV[0], ARGV[1]) if 2 <= ARGV.size
p ARGV
↑で実行してみた結果↓
["すいか", "からす", true, true, true]
["からす", "すいか", true, true, true]
["からす", "すいか"]
参考までに…
ちなみにruby 2.0.0
0073デフォルトの名無しさん
2016/10/19(水) 19:36:52.07ID:o0vkn/jY0074デフォルトの名無しさん
2016/10/19(水) 22:29:42.17ID:ezmv6hmCはしてある?
0075デフォルトの名無しさん
2016/10/19(水) 22:46:03.74ID:3bJ4nK020076デフォルトの名無しさん
2016/10/20(木) 03:15:22.25ID:/8DsWqlkテスト
0077デフォルトの名無しさん
2016/10/20(木) 09:48:49.92ID:3pYX1TsEp ARGV以外はコメントアウトしろよ。
0078デフォルトの名無しさん
2016/10/22(土) 05:56:30.44ID:eX6AWpPBコマンドプロンプトをデスクトップから立ち上げると問題なく起動します。
何が原因でしょうか?
0079デフォルトの名無しさん
2016/10/22(土) 08:36:01.81ID:eX6AWpPB相対パスで書くと実行時に文字化けした状態で絶対パスになってるので文字コードの違いによるものでしょうか?
0080デフォルトの名無しさん
2016/10/22(土) 10:55:27.68ID:O48rD9qTRuby ならあり得るわ
0081デフォルトの名無しさん
2016/10/22(土) 10:55:50.24ID:jUJZAwsX0082デフォルトの名無しさん
2016/10/22(土) 19:50:27.76ID:8CeWG7Cbpath.split('/').map(&:capitalize).join('/')
みたいにするしかないですか?
ありがちな処理なのでもっとあっさり書く方法があったりしないかなって
0083デフォルトの名無しさん
2016/10/22(土) 20:00:43.51ID:jUJZAwsX0084デフォルトの名無しさん
2016/10/22(土) 20:10:25.86ID:8CeWG7Cbそうでもないのかな
0085デフォルトの名無しさん
2016/10/23(日) 01:50:27.34ID:VGMahutRCygwin + Vimでutf-8に設定したら幸せになれました
0086デフォルトの名無しさん
2016/10/23(日) 21:51:04.30ID:ePWxsG1g別スレッドである程度まとまったブロックとして読み込んでバッファリングするようにすると速くなる
でもこのコードを書くのはかなり面倒・・・非同期な読み書きを簡単に実現してくれる
ライブラリとかないですか?
0087デフォルトの名無しさん
2016/10/24(月) 06:15:31.40ID:o4tpRTmI敵との距離が一定以下になれば味方が最寄りの敵を攻撃するようにしたいです。どうすれば良いですか?
0088デフォルトの名無しさん
2016/10/24(月) 08:43:55.39ID:b4iOClrl一対の味方の敵の位置ベクトルをそれぞれa, bとすると、aとbの距離は|a-b|。
味方と敵はそれぞれ複数いるので、一番素直な計算なら(味方の総数)×(敵の総数)通りのペア全てに対して上式で距離を求め、距離が閾値以下かどうかを判定してやればいい。
疑似コードで書けばこんな感じ。
for a in 味方の位置ベクトルの配列
for b in 敵の位置ベクトルの配列
if |a-b| < 閾値 then aがbを攻撃する
0089デフォルトの名無しさん
2016/10/24(月) 09:04:08.10ID:8wVQUY50あれから思いつきで攻撃判定用にスプライトに円を書いてSprite.check(味方,敵)をやってたのですが、こちらのほうが軽くていいですね。
こちらに書き換えてみたらうまくいきました。
0090デフォルトの名無しさん
2016/10/26(水) 21:15:33.13ID:hpPrYAZA0091デフォルトの名無しさん
2016/10/26(水) 21:18:43.85ID:hpPrYAZAputs str.split(" ")
とすると
I
am
a
boy
と出力されます。
puts str.sizeとすると
全ての文字数を数えてしまいます。
一単語ずつ文字数を数えて出力するには
どうしたらいいでしょうか。
0092デフォルトの名無しさん
2016/10/26(水) 21:25:19.00ID:Vi7enIW1puts str.split(" ").size
0093デフォルトの名無しさん
2016/10/26(水) 21:31:21.64ID:3haCvHGLputs str.split(" ").map {|x| x.size }
009492
2016/10/26(水) 21:33:58.54ID:Vi7enIW10095デフォルトの名無しさん
2016/10/26(水) 21:44:17.35ID:hpPrYAZA0096デフォルトの名無しさん
2016/10/27(木) 00:41:35.12ID:WMnZ+0Yu2chのバグだろ
書き込み確認画面が出る際、" を使うと、そこで文字列の終了とみなされる。
" を、\" とエスケープすれば、どうだろう?
0097デフォルトの名無しさん
2016/10/27(木) 10:32:10.58ID:2MnkRHxjしかし、arr[n].name で名前は表示できるのですが、画像が描画できません。どうしたら良いでしょうか?
require 'dxruby'
arr = []
Units = Struct.new(:fig, :name, :lv)
for i in 0..511
img = Image.new(10, 10, color = [i * 3 % 256, i * 5 % 256, i * 7 % 256])
spr = Sprite.new(i % 100 * 10, i / 100 * 10, img)
arr[i] = Units.new(spr, "ice", i * 1.2)
end
Window.loop do
Sprite.draw(arr)
(arr[4].fig).draw
break if Input.key_down?(K_RETURN)
end
0098デフォルトの名無しさん
2016/10/27(木) 12:20:18.56ID:2MnkRHxj空の配列に対してarr[810] = object
とすると、arr[0]に入ってしまいます。
試しに、あらかじめ、配列の全要素に0とかを代入してやると正しい位置に入ります。
insertメソッドを使ってみても同様でした。
配列の長さが予めわからない場合、これだとできない気がするのでなるべくこの方法は取りたくありません。
スマートに挿入する方法は無いですか?
0099デフォルトの名無しさん
2016/10/27(木) 12:21:56.63ID:2MnkRHxj現在の配列の添字の最大数を超えて挿入したときの挙動はpushみたいでした。
0100デフォルトの名無しさん
2016/10/27(木) 13:09:46.97ID:AljoQzp1配列の話は君の勘違いでしょう
0101デフォルトの名無しさん
2016/10/27(木) 21:29:01.57ID:4hI3qXiG以下のような問題が出たのですが
for i in 4..0 do と書いてもダメなようで
どのようにすれば良いのでしょうか?
#4から0を改行区切りで出力してください
for i in 4..0 do
puts i
end
■ このスレッドは過去ログ倉庫に格納されています