Ruby 初心者スレッド Part 59 [無断転載禁止]©2ch.net

レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん2016/10/02(日) 16:50:38.72ID:kFeo4TbM
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、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/

2デフォルトの名無しさん2016/10/02(日) 16:51:40.26ID:kFeo4TbM
たのしいRuby 第5版、2016

Effective Ruby、2015

メタプログラミング Ruby 第2版、2015

Rubyのしくみ、2014

改訂3版 基礎 Ruby on Rails、黒田努・佐藤和人、2015

リファクタリング:Rubyエディション、2010

3デフォルトの名無しさん2016/10/02(日) 18:17:48.09ID:mO5jHYyT
プログラミングElixir、2016

Ruby界隈から、名著が出た。
著者は「プログラミングRuby」のDave Thomas。
関数型言語Elixirは、Ruby + Rails + ErlangVM で、並行処理が得意

Selenium実践入門 ―― 自動化による継続的なブラウザテスト、2016

Seleniumデザインパターン&ベストプラクティス、2015
OSSのブラウザ自動テストツール、Selenium WebDriver を使って、
Rubyでテストを書いた本

プログラマ脳を鍛える数学パズル
シンプルで高速なコードが書けるようになる70問、増井 敏克、2015

CodeIQに掲載された問題を、Ruby, JSなどで解説

「ITエンジニアに読んでほしい!技術書・ビジネス書 大賞(ITエンジニア本大賞)」の受賞作

4デフォルトの名無しさん2016/10/02(日) 18:43:05.77ID:QvMQ+uX0
>>1 乙

5デフォルトの名無しさん2016/10/02(日) 22:05:08.76ID:mO5jHYyT
Linux API を、Windows API に変換するので、Ubuntu64 のバイナリがそのまま動く、
Windows Subsystem for Linux (WSL) で、Ruby, Rails をやっている人いる? 調子はどう?

apt-get で、パッケージもインストールできる

日本語も使える端末、ConEmu。
GUI表示用のXサーバー、Xming X Server for Windows

6デフォルトの名無しさん2016/10/03(月) 07:31:26.25ID:Sy28Ke7B
今試してるとこ
Win対応はRubyのお荷物になってるから、
これを機にWin関連のコードがRuby本体やGemsから一掃されてくれるといいな

7デフォルトの名無しさん2016/10/03(月) 10:44:03.35ID:GNQlIOXR
Rubyはもうオワコン

8デフォルトの名無しさん2016/10/03(月) 17:50:44.12ID:BQDt10lP
rubyのopengl関連のラブラリがどうなってるのか分かり辛いから、
自分で調べたんだけど下のであってる?

・今はlarskanis/openglとvaiorabbit/ruby-openglがある
・larskanis/openglのほうは(vaiorabbit/ruby-openglのドキュメント読むと)opengl2とかよばれている
・opengl2表記から初代opengl(既に開発停止、サイトもなくなっている)が存在する

9デフォルトの名無しさん2016/10/03(月) 17:52:09.82ID:BQDt10lP
足りていない箇所があったら教えて

10デフォルトの名無しさん2016/10/04(火) 20:13:20.14ID:BihL0/mM
Cで書かれたメソッドにポインターを渡す場合どうしたらいいのかわからない
ruby側で「メモリ確保してポインター渡す」にはどうすればいいの?

11デフォルトの名無しさん2016/10/04(火) 22:52:38.60ID:1BCIDfGo
WSLだとRails簡単に動いた
少なくともWin対応完全終了の口実としては十分なレベルだなこれ

12デフォルトの名無しさん2016/10/05(水) 06:20:29.41ID:JVWzXY3A
mswin32だろうがmingw32だろうが需要があるから
どんなに嫌ってる人がいようと続いていく

13デフォルトの名無しさん2016/10/05(水) 14:43:41.37ID:e2s2BqVL
>>10
ffi

14デフォルトの名無しさん2016/10/06(木) 01:25:08.92ID:b/FSG7/S
環境
win7-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の方に切り替えるとアップデートやインストールが上手くいく
正直どこ弄れば良いかさっぱりだわ

15デフォルトの名無しさん2016/10/06(木) 01:28:43.41ID:EykuvLuN
gemのバージョンは?

16デフォルトの名無しさん2016/10/06(木) 01:37:19.84ID:b/FSG7/S
>>15
2.2.4の方が2.6.7、2.3.1の方が2.5.1でした
古いのが原因かと思ってgem update --systemを試しましたが同じくSSLのエラーを吐いてダメでした……

17デフォルトの名無しさん2016/10/06(木) 12:40:09.87ID:4kR5N43K
どうせ隔離して使うんならVagrantでいいじゃん
Windowsで無理にrbenv使う意味がわからん

18デフォルトの名無しさん2016/10/06(木) 16:10:34.56ID:EykuvLuN
>>16
Ruby 2.2.4 の方の gem を 2.5.1 にして比較してみては?

19デフォルトの名無しさん2016/10/06(木) 18:27:59.15ID:TUUHw8QE
ぐぐったらSSLやサーバ関連の問題みたいだな
以下参照して
http://d.hatena.ne.jp/komiyak/20130508/1367993536

20デフォルトの名無しさん2016/10/06(木) 23:45:09.75ID:80e57pGo
質問お願いします。
cronで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__)+

21デフォルトの名無しさん2016/10/07(金) 01:04:31.76ID:yL88npXy
cron で皆がエラーになるのは、一般ユーザーよりも、環境変数が少ないから

22デフォルトの名無しさん2016/10/07(金) 18:41:40.46ID:CUba1Zl4
>>13
返事が遅くなったけど、ありがとう

23デフォルトの名無しさん2016/10/09(日) 16:23:29.55ID:+q97XIgi
rubyってインストールできたらあとはコマンド入力すればいいの?

nokogiriっての使いたいんだけど gem install nokogiriってうっても変なエラーでるだけなんだけど

24デフォルトの名無しさん2016/10/09(日) 16:29:26.13ID:zS2VLXB8
絶望的に向いてない人はいる
人生諦めが肝心

25デフォルトの名無しさん2016/10/09(日) 16:37:40.41ID:+q97XIgi
自己解決したわ 俺は向いてるみたいだ

26デフォルトの名無しさん2016/10/09(日) 17:08:11.44ID:+q97XIgi
requireが通らないんだが?は?

27デフォルトの名無しさん2016/10/09(日) 17:09:47.41ID:+q97XIgi
コードの理解はそんな難しくなさそうなのに手前がめんどくさいんじゃ

28デフォルトの名無しさん2016/10/09(日) 17:29:16.41ID:ztakSrvW
gem search nokogiri
と打っても*** REMOTE GEMS ***
だけしか出てこないんですけど
みなさん同じ症状ですか?
それとも私だけでしょうか?

29デフォルトの名無しさん2016/10/09(日) 18:12:12.28ID:okPyT/Vt
少し上のレスを読む and 自分の環境を書く くらいはしましょうね
$ gem install rubygems-update --source http://rubygems.org/
$ update_rubygems
$ gem search -r nokogiri

30デフォルトの名無しさん2016/10/11(火) 10:02:56.75ID:/UUIzz58
rubyで深層学習するのと他の言語、例えばCやらpythonで深層学習するのと、どこが違うの?
rubyでも同じようなライブラリ作成したら、同じになる?
それとも言語仕様のそもそもの違いで無理なの?
rubyならなんでも出来そう、かつ楽な書き方が出来そうな気がするんだけど

31デフォルトの名無しさん2016/10/11(火) 12:03:30.19ID:aUckxkie
Rubyにはnumpyやscipyやmatplotlibみたいな科学技術計算のためのライブラリが無いから極めて厳しい

32デフォルトの名無しさん2016/10/11(火) 22:02:35.19ID:gtjckSki
つまり誰かがそのライブラリに相当するものを作ってくれれば・・・

33デフォルトの名無しさん2016/10/12(水) 13:13:10.27ID:2jtU3Zls
深層学習用に、既存のCライブラリのrubyバインディングを書くのと、ruby用ライブラリを新規で書くの
どちらもそんなに違い出なさそうに見えるけど実際はどうなんだろ

やっぱりそれぞれ書くのが難しい部分とかある?

34デフォルトの名無しさん2016/10/12(水) 15:25:05.17ID:lA7OeQ/m
コードなんて実際簡単なんだろうな

金になる商売はむずかしいむずかしい言われるもんなんだろ

35デフォルトの名無しさん2016/10/12(水) 17:14:15.29ID:Kt1Sq3SL
fruits=["apple", "orange", "grape", "tomato", "doria", "peach"]

apple_price=[2, 6, 7, 13, 6, 20]



puts "#{fruits[0]}_price"[4]

上のコードでapple_price[4]の要素6を取り出したいのですが、"e"が表示されます。これは"apple_price"という文字列の
5番目を見ている、というのは理解できます。6を表示させるにはどうすればよいのでしょうか。よろしくお願いします。

36デフォルトの名無しさん2016/10/12(水) 17:41:20.38ID:m4XsbzZB
イマイチ何を目的としているのかわからんけど、
6を表示するだけならputs eval("#{fruits[0]}_price")[4]

37デフォルトの名無しさん2016/10/12(水) 19:02:48.90ID:Kt1Sq3SL
おお、すごい!ちゃんと6が表示されました。ありがとうございます。
ちょっと、今ググってみると、「「eval」は、Rubyの文字列を評価するメソッドです。」とあり、
評価するという意味が分かりませんが、とにかく文字列をつなげて“配列名”として扱える
ことができるのはわかりました。

なんでこんな妙なこと?をしているのかというと、配列名がすさまじく増えてきた上に、長くなってきて
見苦しくなってきたので、配列名の単語リスト配列を作成してその配列から番号で拾ってきてつなげれば
短くなって済むじゃんという動機でした。ところが、それらの文字がうまくつながらないので困っていた次第です。
とにかく、ありがとうございました。もうちょっと調べてみます。

38デフォルトの名無しさん2016/10/12(水) 19:15:43.53ID:5MBS+YlH
Hashでやれば

39デフォルトの名無しさん2016/10/12(水) 19:16:58.95ID:AoMg70NU
そういう場合はHash使おう

40デフォルトの名無しさん2016/10/12(水) 20:26:38.78ID:Kt1Sq3SL
いや、このevalってすごいですね。つまり、"#{fruits[0]}_price"はこの時点では配列名でもなんでもなく
ただの文字列だけど、eval("#{fruits[0]}_price")することによって、配列名としての役割をもたせられた?
というわけですね。要するに二次嫁を実際に動かすメソッドというわけですよね。
なんてすごいんだ。これからはこれを使いまくろう。素晴らしいものを教えていただきありがとうございました。
ハッシュは書くのがめんどくさいので、これにします。でも情報ありがとうございました。

41デフォルトの名無しさん2016/10/12(水) 20:38:17.90ID:9oDwxE2X
こういう奴がスクリプトインジェクション脆弱性を作り込むんだよな

42デフォルトの名無しさん2016/10/12(水) 21:18:02.32ID:golIGFQa
まあ「すごいけどなんかキモい」と感じて欲しいところではある

43デフォルトの名無しさん2016/10/12(水) 22:38:29.15ID:nShtFhcR
そんな事でevalなよ

44デフォルトの名無しさん2016/10/13(木) 09:04:29.36ID:1bl1DIi2
>>40
hashは配列を変換しても作れるし、多次元配列を使ったとしても
evalとか使うよりもよほど簡潔に書けると思うが。

45デフォルトの名無しさん2016/10/13(木) 11:10:37.62ID:a7epO2oP
>>40-41
perlのときにも同じ展開を聴いた覚えがある

46デフォルトの名無しさん2016/10/13(木) 18:51:51.44ID:bdwv69IA
>>44
わかりました、もうちょっと勉強します。
あとevalについて調べてみましたが、なんだか多用するようなメソッドじゃないみたいです。ただ、こんな
強力なメソッドがあることを知ることができたのは大きな収穫でした。

47デフォルトの名無しさん2016/10/13(木) 19:08:12.98ID:Xwk5OgLP
popenの方が強力

48デフォルトの名無しさん2016/10/14(金) 01:49:18.02ID:lTvGl+LI
twitterとrubyで質問です。
rubyで自分のフォロワー一覧、あと自分のフォロワーがそれぞれフォローしてる人を一覧で得たいんですが、どうコードを書けばいいでしょうか?
rubyのバージョンは2.3.1です。
client.updateを使ってツイートを投稿することはできました。

49デフォルトの名無しさん2016/10/14(金) 07:05:19.57ID:xv7XrH2t
Twitter APIとRubyクライアントのドキュメントを読む
英語読む気ないなら諦めましょう

50デフォルトの名無しさん2016/10/14(金) 14:11:08.06ID:4bSlGLeL
Twitter APIの使い方まとめ
https://syncer.jp/twitter-api-matome

エンドポイントの一覧の、
ユーザー間の関係・フォロー・フォロワー、あたりを参照

51デフォルトの名無しさん2016/10/16(日) 20:26:06.98ID:/verdR3z
ちょっと思い立ったんだけど、require や import や 継承した
ライブラリ、モジュール、クラスやメソッドのソースコードを
表示したり、そのソースのファイルパスを返すメソッドがあったら
便利じゃない?
そういうメソッドあるのかな。

52デフォルトの名無しさん2016/10/16(日) 20:45:49.85ID:bFWPoPH4
pry使え

53デフォルトの名無しさん2016/10/16(日) 22:04:09.40ID:B0JyF1+C
たぶん、メタプログラミング・リフレクションに、あるだろ

54デフォルトの名無しさん2016/10/17(月) 04:13:11.14ID:G5XuU76K
https://www.kmc.gr.jp/~ohai/rubysdl_doc.html
ここを参考にして、
SDL::Event#mouse_x
でマウスのx座標を取得しようとしたら#より右側がコメントアウト扱いになってしまう
解決策をおしえてください

55デフォルトの名無しさん2016/10/17(月) 05:37:21.81ID:xsBX/OJB
>>54
それが出てくるってことは重症だ
君の使ってるRubyの参考書のRubyのインスタンスメソッドの説明はどうなってる

56デフォルトの名無しさん2016/10/17(月) 06:27:05.93ID:9oMVPCEa
# から行末までは、Rubyではコメントになる

# を、.(ドット)に変えれば、どうなる?

57デフォルトの名無しさん2016/10/17(月) 09:51:34.36ID:PK8gee68

58デフォルトの名無しさん2016/10/17(月) 12:43:13.80ID:/xEkgA1M
unlessとか気持ち悪いんですがこれはよく使うものなんですか?

59デフォルトの名無しさん2016/10/17(月) 12:47:09.09ID:O9P4o+SC
うん
とっても

60デフォルトの名無しさん2016/10/17(月) 12:56:06.33ID:wcVEram7
いまいち読み下しにくいので後置でのみ使う人もいる
流れによっては if + 否定的条件 であえて書くときもある
なんでもかんでも機械的にunlessに置き換えれば好ましいというわけでもない

61デフォルトの名無しさん2016/10/17(月) 13:10:36.28ID:/xEkgA1M
とりあえずunless覚えておきます
というかrailsのためだけにrubyを覚えようと思っているぐらいなので極めるつもりはないですけど

62デフォルトの名無しさん2016/10/17(月) 13:25:44.82ID:8eStTtOD
unlessは必ず副作用があるから、関数型っぽいスタイルで作るならほとんど使う機会は無いはず

63デフォルトの名無しさん2016/10/17(月) 14:17:13.45ID:4xjyqR1P
指定したディレクトリごとにgemのライブラリを分けてインストールする方法ありませんか?
bundlerだとプロジェクトごと管理されてしまうので使いまわせませんよね

64デフォルトの名無しさん2016/10/19(水) 17:08:04.64ID:6/Oyo1yl
ruby 2.2.3

すいか→からす のようにしりとりの正誤を
判定するプログラムを作りたい。
実行する時に「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)

65デフォルトの名無しさん2016/10/19(水) 17:36:03.73ID:yr0BTWsi
俺の環境ではエラーにならないので原因はスクリプトではないかと。
引数が1つだとうまくいくのか?
エラーが出る場合は環境とどんなエラーが出たかも書かないと。

66デフォルトの名無しさん2016/10/19(水) 17:42:23.59ID:6/Oyo1yl
1つだと上手くいきます
if文のところに
undefine method '[]' for nilというエラーが。

67デフォルトの名無しさん2016/10/19(水) 17:45:20.12ID:QoKZwwi3
エラーは訳すな約すな
標準入力のエンコーディングが変なことになってる環境でreverseが文字単位にならないと推測
rubyのバージョンと実行環境

68デフォルトの名無しさん2016/10/19(水) 17:56:18.75ID:yr0BTWsi
>>66
p ARGVだけにしたら何が出る?

69デフォルトの名無しさん2016/10/19(水) 18:19:16.64ID:4/E1zdGS
>>64
str1.reverse[0] は str1[-1] で十分でしょ。
def judge(str1,str2); str1[-1]==str2[0]; end

>str1=すいか、str2=からすと指定すれば
これがエラーにならないのが、むしろ謎。

70デフォルトの名無しさん2016/10/19(水) 18:31:10.49ID:6gjRUSSv
ruby reverse.rb からす すいか

reverse.rb:2:in 'judge' : undefine method '[]' for nil : NilClass (NoMethodError)
from reverse.rb:13:in '<main>'というエラー

ARGVのみにしてもエラーが出る

71デフォルトの名無しさん2016/10/19(水) 19:12:58.53ID:r8TZ1Dhr
68の言うとおり
p ARGV
を実行してみたら?

コマンドライン行のコピーと結果の貼り付けも忘れずに

72デフォルトの名無しさん2016/10/19(水) 19:19:47.78ID:I4oLsIwo
>>64
def 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

73デフォルトの名無しさん2016/10/19(水) 19:36:52.07ID:o0vkn/jY
からすとすいかの間の空白が全角とか?

74デフォルトの名無しさん2016/10/19(水) 22:29:42.17ID:ezmv6hmC
require "jcode"
はしてある?

75デフォルトの名無しさん2016/10/19(水) 22:46:03.74ID:3bJ4nK02
まあ全角空白でないのならレンタルサーバでRuby1.8とか中古本のCD-ROMでRuby1.9 for Windowsとかそういう可能性も視野に入るな

76デフォルトの名無しさん2016/10/20(木) 03:15:22.25ID:/8DsWqlk
>>74
テスト

77デフォルトの名無しさん2016/10/20(木) 09:48:49.92ID:3pYX1TsE
>>70
p ARGV以外はコメントアウトしろよ。

78デフォルトの名無しさん2016/10/22(土) 05:56:30.44ID:eX6AWpPB
Ruby 2.2.5p319 + dxruby + gvimで、gvimからコマンドプロンプトを通じて実行すると画像Image.load(のあとが文字化けして画像が読めません。
コマンドプロンプトをデスクトップから立ち上げると問題なく起動します。
何が原因でしょうか?

79デフォルトの名無しさん2016/10/22(土) 08:36:01.81ID:eX6AWpPB
参照画像を絶対パスにしたら表示できましたが、全画像を絶対パスへと補完できるとは言え気持ち悪いです。
相対パスで書くと実行時に文字化けした状態で絶対パスになってるので文字コードの違いによるものでしょうか?

80デフォルトの名無しさん2016/10/22(土) 10:55:27.68ID:O48rD9qT
/hoge(ASCII)/fuga(EUC)/hage(UTF-8)/moge(SJIS)/ みたいなパス作ってるとかね
Ruby ならあり得るわ

81デフォルトの名無しさん2016/10/22(土) 10:55:50.24ID:jUJZAwsX
文字化け?

82デフォルトの名無しさん2016/10/22(土) 19:50:27.76ID:8CeWG7Cb
パスの各コンポーネントをそれぞれcapitalizeしたいと思ったら
path.split('/').map(&:capitalize).join('/')
みたいにするしかないですか?

ありがちな処理なのでもっとあっさり書く方法があったりしないかなって

83デフォルトの名無しさん2016/10/22(土) 20:00:43.51ID:jUJZAwsX
ありがちなの?ないないでしょ

84デフォルトの名無しさん2016/10/22(土) 20:10:25.86ID:8CeWG7Cb
英語圏の人ならわりとやるんじゃないかなあと思ったんですが
そうでもないのかな

85デフォルトの名無しさん2016/10/23(日) 01:50:27.34ID:VGMahutR
>>80自己解決です

Cygwin + Vimでutf-8に設定したら幸せになれました

86デフォルトの名無しさん2016/10/23(日) 21:51:04.30ID:ePWxsG1g
でかいファイルをシーケンシャルで読む時にIO#readでちまちま読むとえらい遅いけど
別スレッドである程度まとまったブロックとして読み込んでバッファリングするようにすると速くなる
でもこのコードを書くのはかなり面倒・・・非同期な読み書きを簡単に実現してくれる
ライブラリとかないですか?

87デフォルトの名無しさん2016/10/24(月) 06:15:31.40ID:o4tpRTmI
dxrubyでスプライトを敵という配列、味方という配列にそれぞれプッシュして入れてます。
敵との距離が一定以下になれば味方が最寄りの敵を攻撃するようにしたいです。どうすれば良いですか?

88デフォルトの名無しさん2016/10/24(月) 08:43:55.39ID:b4iOClrl
>>87
一対の味方の敵の位置ベクトルをそれぞれa, bとすると、aとbの距離は|a-b|。
味方と敵はそれぞれ複数いるので、一番素直な計算なら(味方の総数)×(敵の総数)通りのペア全てに対して上式で距離を求め、距離が閾値以下かどうかを判定してやればいい。
疑似コードで書けばこんな感じ。
for a in 味方の位置ベクトルの配列
 for b in 敵の位置ベクトルの配列
  if |a-b| < 閾値 then aがbを攻撃する

89デフォルトの名無しさん2016/10/24(月) 09:04:08.10ID:8wVQUY50
ありがとうございます。
あれから思いつきで攻撃判定用にスプライトに円を書いてSprite.check(味方,敵)をやってたのですが、こちらのほうが軽くていいですね。
こちらに書き換えてみたらうまくいきました。

90デフォルトの名無しさん2016/10/26(水) 21:15:33.13ID:hpPrYAZA
str =

91デフォルトの名無しさん2016/10/26(水) 21:18:43.85ID:hpPrYAZA
str = " I am a boy "
puts str.split(" ")
とすると
I
am
a
boy
と出力されます。
puts str.sizeとすると
全ての文字数を数えてしまいます。
一単語ずつ文字数を数えて出力するには
どうしたらいいでしょうか。

92デフォルトの名無しさん2016/10/26(水) 21:25:19.00ID:Vi7enIW1
>>91
puts str.split(" ").size

93デフォルトの名無しさん2016/10/26(水) 21:31:21.64ID:3haCvHGL
puts str.split(" ").map(&:size)
puts str.split(" ").map {|x| x.size }

94922016/10/26(水) 21:33:58.54ID:Vi7enIW1
あ、単語の数じゃないのね失礼w

95デフォルトの名無しさん2016/10/26(水) 21:44:17.35ID:hpPrYAZA
できました。ありがとうございます。

96デフォルトの名無しさん2016/10/27(木) 00:41:35.12ID:WMnZ+0Yu
>>90-91
2chのバグだろ

書き込み確認画面が出る際、" を使うと、そこで文字列の終了とみなされる。
" を、\" とエスケープすれば、どうだろう?

97デフォルトの名無しさん2016/10/27(木) 10:32:10.58ID:2MnkRHxj
DXrubyで、配列に画像、名前、数値と言った具合に値を格納したいので構造体を使ってます。
しかし、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

98デフォルトの名無しさん2016/10/27(木) 12:20:18.56ID:2MnkRHxj
もう一つお聞きしたいです。
空の配列に対してarr[810] = object
とすると、arr[0]に入ってしまいます。
試しに、あらかじめ、配列の全要素に0とかを代入してやると正しい位置に入ります。
insertメソッドを使ってみても同様でした。
配列の長さが予めわからない場合、これだとできない気がするのでなるべくこの方法は取りたくありません。
スマートに挿入する方法は無いですか?

99デフォルトの名無しさん2016/10/27(木) 12:21:56.63ID:2MnkRHxj
>>98に補足
現在の配列の添字の最大数を超えて挿入したときの挙動はpushみたいでした。

100デフォルトの名無しさん2016/10/27(木) 13:09:46.97ID:AljoQzp1
arrにはUnitsが入っててUnitsにはdrawがないから。
配列の話は君の勘違いでしょう

101デフォルトの名無しさん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

102デフォルトの名無しさん2016/10/27(木) 21:33:26.89ID:IpcVW8ex
>>101
(1) 出力するときに 4-i を出力する
(2) Integerクラスで使えそうなメソッドがないか探す
好きな方を選べ

1031012016/10/27(木) 22:06:29.82ID:4hI3qXiG
下のコードで動きましたが

(0..4).to_a.reverse.each do |i|
puts i
end

iをデクリメントすることができないとか
ちょっと衝撃でした

最近はオブジェクトを操作するんで
for文なんて使わないでしょうけど

104デフォルトの名無しさん2016/10/27(木) 22:13:34.88ID:IpcVW8ex
>>103
Range クラスの説明を読め

105デフォルトの名無しさん2016/10/27(木) 22:42:19.91ID:qlBkdymK
上で書かれてるようにIntegerの4.downto(0)でどーぞ
より汎用的なのが欲しかったらstepを使ってね

1061012016/10/27(木) 22:55:48.72ID:4hI3qXiG
PHPなら

for ($count = 4; $count > 0; $count--){

}

と、直感的に書けるのに
Rubyってそういう言語なんだなと思いました

107デフォルトの名無しさん2016/10/27(木) 23:03:14.77ID:qlBkdymK
>>98
DXRuby使ったことないから変なこと言ってるかもだけどHashとかと勘違いしてる可能性はない?
少なくともArrayは指定した要素数なければ自動的に拡張されるはずだし、リファレンスマニュアルにもそう書いてる

108デフォルトの名無しさん2016/10/27(木) 23:14:12.71ID:IpcVW8ex
>>106
それは直感的というんじゃなくて、「PHPに慣れてる人から見れば」というだけだ
PHPのような書き方のループをほとんど使わない言語はたくさんある

109デフォルトの名無しさん2016/10/27(木) 23:52:33.07ID:HseNjWnT
>>106
直感的といいながらそれだと0が出力されない件について。

>>101「4から0を改行区切りで出力してください」

110デフォルトの名無しさん2016/10/28(金) 00:28:10.54ID:W/QcN0Ng
これは恥ずかしい直感w

俺ならこうする
puts (0..4).to_a.reverse

111デフォルトの名無しさん2016/10/28(金) 00:30:51.22ID:hY3IWwKu
PHPは、JSよりも、クソだろ

Rubyでは、ほとんどバグを作ることはない。天国

112デフォルトの名無しさん2016/10/28(金) 02:06:17.44ID:hybKxCis
>>110
to_aしてreverseはこねくり回しててキモい

113デフォルトの名無しさん2016/10/28(金) 16:37:59.02ID:Gcdt9agW
>>100解決しましたありがとうございます

114デフォルトの名無しさん2016/10/29(土) 13:16:09.07ID:Z9R3Bpkc
複数のEnumerableを同期させる一般的でエレガントな書き方って何?
元ネタが無限List同士の足し算なんで[]は使えない。
Lisp系のmapのように複数のEnumerableで要素毎に演算させたいのだけど。

一般的とかエレガント、とかいうのは言葉の綾なので
俺ならこうするっていうコードでいいです。

115デフォルトの名無しさん2016/10/29(土) 13:30:26.15ID:Y7alBFBP
>>114
まずは自分がサンプル出してみようぜ
イマイチ何をしたいのか分からないんで

116デフォルトの名無しさん2016/10/29(土) 13:47:23.31ID:pNJKjv6A
Lazy#zip とは違うん?

1171142016/10/29(土) 15:46:26.62ID:Z9R3Bpkc
>>115
無限Listじゃないけど、
a = [1, 2, 3, 4, 5]
b = [2, 3, 4, 5, 6]
c = []
(0..4).each do |i|
c << a[i] + b[i]
end
こーゆー複数のEnumerableの要素同士の演算をやりたくて、
[]を使わないコードの一般的な書き方。

118デフォルトの名無しさん2016/10/29(土) 15:56:09.74ID:Y7alBFBP
>>117
だったら >>116 の通りだね
無限だったら Enumerable::Lazy#zip だし、有限なら Enumerable#zip

119デフォルトの名無しさん2016/10/29(土) 23:44:35.86ID:FqWL80JH
a= 1.step.lazy
b= 2.step.lazy
p a.zip(b).map{|(x,y)|x+y}.take(10).force
こんな感じかな

120デフォルトの名無しさん2016/10/30(日) 06:16:43.08ID:6aoQoQ7p
いま友人と競技プログラミングのようなことをしているのですが
処理速度にインデントの有無や変数名・メソッド名の長さは影響するのでしょうか?

121デフォルトの名無しさん2016/10/30(日) 07:22:50.93ID:E1a/AFOu
>>120
極端な長さ(100万文字とか)でない限りは無視できるレベル

122デフォルトの名無しさん2016/10/30(日) 07:33:28.32ID:3gvxzMHV
>>120
標準添付ライブラリの benchmark で測ってみ

1231142016/10/30(日) 12:14:06.69ID:EmeJsRHl
>>118
>>119
ありがとうございました。
元ネタも119のやり方でいけることを確認しました。
zipの使い方はもう少し勉強してみます。

124デフォルトの名無しさん2016/10/30(日) 13:42:37.03ID:3A6g5SNv
>>121
>>122
ありがとうございます
短くしたりして10回行った平均タイム計測して比較していたのですが
言われてみれば短くなったような気がするけど変わってないような気もする程度で困っていました
ほんとうにありがとうございました

125デフォルトの名無しさん2016/10/30(日) 17:08:51.99ID:DhcMHpiw
symbolのhashがぶつからなければ遅くならない

126デフォルトの名無しさん2016/10/30(日) 17:10:16.01ID:DhcMHpiw
つまりひとつひとつの文字数を気にするより
変数名・メソッドの総数が(それぞれ数文字程度でも何億個もあれば)問題

127デフォルトの名無しさん2016/11/01(火) 03:29:08.77ID:Y1KW6BLy
下の例文みたいにバッククォート文の中で新たにruby動かして文字を表示させて、
そのバッククォート文の帰り値をさらに表示させたんですが、
えらくquoteされてて、帰り値を他の操作に使うには扱いにくいです
なんとかして元に戻せないでしょうか

例文
p `ruby -e 'p "what \n time \\n is \\\n it"'`

128デフォルトの名無しさん2016/11/01(火) 07:11:46.65ID:LAzD7QHV
普通にeval使えばいいんじゃないか

129デフォルトの名無しさん2016/11/01(火) 13:46:39.38ID:jrgGST5A
pやppだとpretty-printするから
そのまま出力したい場合はputsとかIO#writeで

130デフォルトの名無しさん2016/11/02(水) 08:27:48.48ID:haJxcE0h
p は美しくないぞ

131デフォルトの名無しさん2016/11/02(水) 14:27:05.74ID:tET8fuT+
amazon apiで在庫検知したのどうやってツイッターにpostすればいいんですか^^;

132デフォルトの名無しさん2016/11/02(水) 16:49:50.54ID:db1quxwb
twipy

133デフォルトの名無しさん2016/11/03(木) 08:10:12.47ID:lfIkemy8
pp使うときってrequire 'pp'するじゃないですか?

でもppなんて通常デバッグ用ですよね?
一時的にrequireするだけでソースコードに残さないですよね?
そんなものをいちいち書きたくありません。

.rubyrc みたいなのでrequire 'pp'書いておけば
どのスクリプトからでも使えるよみたいなのないですか?

Railsの話ではありません

134デフォルトの名無しさん2016/11/03(木) 10:30:21.74ID:57gZHyJM
コマンドラインオプションでええやん

135デフォルトの名無しさん2016/11/03(木) 10:51:02.30ID:6FeMk1RE
import .rubyrc

136デフォルトの名無しさん2016/11/03(木) 13:29:30.56ID:lfIkemy8
なさそうですね。ありがとうございました。

137デフォルトの名無しさん2016/11/03(木) 17:22:53.81ID:DhApkK4z
環境変数RUBYOPTにオプションを設定する
-rpp とか指定しておけばいい

138デフォルトの名無しさん2016/11/03(木) 19:08:39.80ID:lfIkemy8
>>137
動きました。ありがとうございました。
これでコードレビューで、使ってないライブラリの
requireをコミットするんじゃねーよってドヤ顔できます。

139デフォルトの名無しさん2016/11/04(金) 08:04:24.16ID:je13exBR
pry 使え

140デフォルトの名無しさん2016/11/05(土) 09:03:33.72ID:3jWRFMI3
JavaScriptの分割代入みたいな簡単にかける構文はありませんか?

let obj = {a: 1, b: 2, c: 3}
let {a, b} = obj
console.log(a)

これすごく関数の引数にも使えるから便利なんです
function foo({a, b}) { console.log(a) }
foo(obj)


あまり使いませんがネストされたオブジェクトでも一発でとってこれちゃうというw
let obj = {a: 1, b: {bb: {bbb: 2}}}
let {b:{bb:{bbb}}} = obj

141デフォルトの名無しさん2016/11/05(土) 09:08:44.59ID:3jWRFMI3
あともう一つ。

let obj = {
 a: 1,
 foo() { console.log(this.a) },
}
obj.foo() // 1と出力

もしくは、

let obj = new class {
 constructor() { this.a = 1 }
 foo() { console.log(this.a) }
}
obj.foo() // 1と出力


これ相当のコードをできるだけ短く書く方法ないでしょうか?

142デフォルトの名無しさん2016/11/05(土) 09:20:04.03ID:g4s/HAgH
>>140
hash = { a: 1, b: 2 }
a, b = hash.values_at(:a, :b)
p a # => 1

def f(a:, b:); p a; end
f(hash) # => 1

143デフォルトの名無しさん2016/11/05(土) 09:26:45.75ID:CJv/XjYq
古いrubyにはないけど取得だけなら
Hash#dig

144デフォルトの名無しさん2016/11/05(土) 11:27:15.41ID:3jWRFMI3
>>142
> a, b = hash.values_at(:a, :b)
=の左右の両方にaとbがでてきてdryではないようですね。

長い名前で数が多いと嫌な感じです。
name, value, total, count = hash.values_at(:name, :value, :total, :count)

ローカル変数に入れておけば静的解析ができるので名前のミスとか
テキストエディタでリアルタイムにわかるのですが。

function foo({name, value, total, count} {
  みたいにすると、引数書いてるのとほぼ変わらない程度で
  オブジェクトからローカル変数に入れることができるのですが。

  さらにこれもRubyでは出来ないと思いますが、
  return {name, value} のように書くことは出来ないですよね?
}

{name: name, value: value} の省略形です。
このようにオブジェクトのキー = 変数名としておくと
dryで簡単にオブジェクトして返すことができるのですが。

145デフォルトの名無しさん2016/11/05(土) 13:12:14.27ID:g4s/HAgH
>>144
RubyはHashをそんなに使わないしね
JavaScriptで簡単に書けるパターン「も」あるよってだけだし

146デフォルトの名無しさん2016/11/05(土) 13:35:55.87ID:3jWRFMI3
> RubyはHashをそんなに使わないしね
では何を使うんですか?と聞かれたら
オブジェクト(クラスのインスタンス)って答えるのだろうけど
JavaScriptではハッシュとオブジェクトは同じもので

class A {
 constructor() {
  this.name = "name"
 }
}

foo({name}) {
 console.log(name);
}

foo(new A())

みたいなことも出来ますよ。
なのでHashをそんなに使わないっていうのは
あまり理由になっていません。

147デフォルトの名無しさん2016/11/05(土) 13:39:51.44ID:3jWRFMI3
Rubyでもみたいな事したいってあると思いますがね。

keyword = params[:keyword]
page = params[:page]
limit = params[:limit]

じゃなくて↓こう書きたいとか。

keyword, page, limit = request.params

148デフォルトの名無しさん2016/11/05(土) 13:55:01.42ID:g4s/HAgH
>>146
そうですか、へーって感じですね
あとはJavaScriptスレでどうぞ
ここは煽りスレじゃないんで

149デフォルトの名無しさん2016/11/05(土) 15:03:39.50ID:3jWRFMI3
煽りじゃなくて質問ですよw

RubyでJavaScriptのクロージャーみたいなのを
書く簡単な方法はないでしょうか?

let func = i => i+1

func(1) // 2

150デフォルトの名無しさん2016/11/05(土) 15:12:29.51ID:fKvWQoRX
>>147
そういうのはRubyの言語仕様でやるのではなくてRailsなどがそういったオブジェクトを用意すべきだと思う。

151デフォルトの名無しさん2016/11/05(土) 15:23:37.67ID:3jWRFMI3
>>150
言語仕様でやらないと無理だと思うよ。

代入先の変数名を関数が知ることは出来ないでしょ?

まあPerlみたいに、スカラー(単数の変数)に代入するか
リスト(要は配列)に代入するかを関数の中で知ることができる言語があるから、
"言語仕様に"そういうことがあれば関数が知ることができるかもしれないけど。
(見ての通り言語仕様があることが前提となってる)

ちなみにPerlの場合は、

sub foo { wantarray ? 1 : 2}

みたいに書くと以下のようになる。
(通常は配列として適したものを返すために使うべき)

$value = foo; # 2
@value = foo; # 1

wantarrayでどの型(正確に言うとコンテキスト)が要求されているかを
foo関数の中で知ることができるのだけど、同じように「どの変数名に代入しようとしているか?」を
知ることが出来ないと、引数省略して変数に入れることは出来ない。

152デフォルトの名無しさん2016/11/05(土) 16:01:00.44ID:9rWJk3qM
>>149
初心者だけど
Procになるのかな

func = lambda { |i| i + 1 }
func.call(1) => 2

Kernel#lambdaはProcを作る方法の一つで、ほかにもいくつかあってそれぞれ特徴があるよ
あと呼び出しのfunc.call()はfunc.()とちょっと略しても書ける

>>151
便利そうだけどRubyにはないっぽい?
あと言語仕様でこうあるべきだイヤそうじゃない
みたいなのをここでやられても困るよ

153デフォルトの名無しさん2016/11/05(土) 16:07:31.56ID:3jWRFMI3
>>152
言語仕様の話を始めたのは俺じゃないし。
言語仕様でなければ実現不可能だろうけど
別に言語仕様である必要はない。

JavaScriptなんて言語仕様になったけれども、対応してないブラウザでも
使えるようにするために、トランスラパイラを文法を変換したりしているからね。
Rubyの世界でもそういう改良版Rubyを使うとかいう方法でもいいのよ。

ようはより短く書く方法を探しているだけ。

154デフォルトの名無しさん2016/11/05(土) 16:09:40.54ID:9rWJk3qM
>>153
>ようはより短く書く方法を探しているだけ。
だったら他の話には反応しなくて良いんだよ

ところでクロージャーみたいなのの話はどうでもいいんだろうか
俺答え損だった?

155デフォルトの名無しさん2016/11/05(土) 16:26:05.09ID:3jWRFMI3
> 俺答え損だった?

その答え自体は知ってたけど、
それがRubyでの一番短い書き方だって
わかったので無駄ではないよ。

lambda とか call とかいう単語を
省くことは出来ないのね。

156デフォルトの名無しさん2016/11/05(土) 16:34:09.52ID:g4s/HAgH
>>155
> lambda とか call とかいう単語を
> 省くことは出来ないのね。
だからなに?
質問じゃないじゃん
JavaScriptに有利な例題だけあげてJavaScritpマンセーしてるだけじゃん

そういうのは別スレでやれ

157デフォルトの名無しさん2016/11/05(土) 16:36:52.31ID:p7aXJL/r
っ CoffeeScript

158デフォルトの名無しさん2016/11/05(土) 16:57:35.17ID:u9ZZUUBm
>>145
いつの話だよ
今のRubyはRailsのせいでHashまみれの糞ビッチだよ

159デフォルトの名無しさん2016/11/05(土) 17:18:22.74ID:3jWRFMI3
>>156
> 質問じゃないじゃん

え? 質問は>>149に書いたとおり
クロージャーみたいなのを簡単に書く方法ですが?

なんで質問に対する回答にコメントを
質問だって勘違いしてるの?

それとも回答にコメントしたらいけないって
言いたいのかな?

160デフォルトの名無しさん2016/11/05(土) 17:25:06.81ID:3jWRFMI3
>>156
> JavaScriptに有利な例題だけあげてJavaScritpマンセーしてるだけじゃん

普段JavaScriptで書いていて、JavaScriptでもっと短く書くことができる。
無駄のないコードを書くのが好きなのでRubyでももっと短く書きたい。

Rubyは初心者だが、プログラミングは初心者ではなく検索能力もあるので
Rubyで同等またはRubyの方が短く書くことができるものであれば
大抵はすぐに見つけてしまう。だからそういうものは質問しない。

仮にRubyではそれができないのであれば検索しても見つかるはずがない。
見つかったものは質問しないが、見つからないものは質問するしかない。

だから単に俺が見つけられないものを質問しているだけなんだが、
それが結果的にRubyでは無理なことになってしまってるだけだよ。

161デフォルトの名無しさん2016/11/05(土) 17:42:40.29ID:u9ZZUUBm
lambdaは->とも書ける
俺は書く位置が気持ち悪くて大嫌いだけどね
Rubyが独立した関数式を持たないのは有名な欠点として昔から言われてることなので、今更言われてもそうだね不便だねとしか

162デフォルトの名無しさん2016/11/05(土) 17:55:37.24ID:3jWRFMI3
http://qiita.com/sudahiroshi/items/c51618dec0f56a54670e

> # 引き数が1つ
> foo = -> ( x ) { x * x }
> foo[ 5 ] # => 25
>
> # 以下のように呼び出すことも可能です
> foo.( 5 ) # => 25
> foo.call 5 # => 25

なんだ。lambdaいらねーじゃん。callいらねーじゃん。
こういうのを教えてくれよ。

> 今更言われてもそうだね不便だねとしか

そんなこと言われてもね。今更Ruby初心者といわれても
始めたばかり。どうしろと?

163デフォルトの名無しさん2016/11/05(土) 18:18:33.92ID:9rWJk3qM
>>162
callは略せるって上に書いたでしょ
lambdaの方はしらんかったけどたしかにキモいなこれ
callの方も結構ヘンだけど
あと余計なことには反応しなくて良いんだってば

164デフォルトの名無しさん2016/11/05(土) 18:20:42.36ID:VSrxz5YG
あなたRubyやんないほうがいいんじゃない?
まあ仕事でRubyのプロジェクトに入っただけかもしれないけど。

165デフォルトの名無しさん2016/11/05(土) 18:45:31.46ID:M1fQHNFf
喧嘩すんなよRubyが糞なのは普遍なんだから

わかったならPython使え情弱どもが

166デフォルトの名無しさん2016/11/05(土) 18:49:13.91ID:szmfxvT7
> 普段JavaScriptで書いていて、JavaScriptでもっと短く書くことができる。

フフッてなったw

167デフォルトの名無しさん2016/11/05(土) 19:25:21.38ID:HMFIz/40
[5,2,3].sort # =>
ってソースに書いておくと
[5,2,3].sort # => [2, 3, 5]
みたいに置き換えてくれるツールがあったら教えてください

168デフォルトの名無しさん2016/11/05(土) 22:43:25.54ID:LJBtWuSU
存在するファイルは上書きせずにファイルをコピーってどうやるの?

169デフォルトの名無しさん2016/11/05(土) 22:57:00.73ID:CJv/XjYq
ダイヤお姉ちゃんに頼む

170デフォルトの名無しさん2016/11/05(土) 23:00:12.07ID:LJBtWuSU
KurosawaDaiya.copy(from, dest)
#=> NameError: uninitialized constant KurosawaDaiya

駄目でした

171デフォルトの名無しさん2016/11/06(日) 00:59:43.52ID:Mq0g4tm5
それはお姉ちゃんをコピーしようとしてるのでは

172デフォルトの名無しさん2016/11/06(日) 03:07:23.22ID:8WadcDvl
foo(
 a: data['a'],
 b: data['b'],
 c: data['c'],
 d: data['d']
)

これをもっと短く書く方法を教えて下さい!

173デフォルトの名無しさん2016/11/06(日) 09:09:40.26ID:UB8ayWaX
>>147
Effective Ruby の項目10に書いてあるけど、

構造化データを扱う際、Hashの配列よりも、
クラスまたは、Struct(簡易クラス、クラスジェネレータ)のような専用の型を、使った方がいい

data[:name]
キー名のような実装の詳細が、隠蔽されず表に出てくる。
また、存在しないキーは、nilとなる

Person = Struct.new(:name, :address) #定数に代入
data = Person.new("foo", "fugafuga")
data.name

Structでは属性になるから、getter, setter も付いているし、
存在しない属性名でアクセスすると、NoMethodErrorになる

JavaScript(ES3)では、Hashが無いから、その代わりに、
Objectのプロパティを使っているので、obj.__proto__ という、
たまたま実行環境が使っている、キー名で上書きすると、誤動作する

だから、キーを作る際、__proto__かどうか、チェックしないといけないので不便

174デフォルトの名無しさん2016/11/06(日) 09:10:35.91ID:6TZQqHcY
>>172
Rails使ってるなら

foo(data.symbolize_keys)

175デフォルトの名無しさん2016/11/06(日) 09:28:36.42ID:rGVVvSQ9
foo(**data)

176デフォルトの名無しさん2016/11/06(日) 12:09:01.31ID:8WadcDvl
>>174 >>175
dataにはa, b, c, d 以外も含まれているので
それではだめなのです。

177デフォルトの名無しさん2016/11/06(日) 13:13:30.71ID:CGfTBBGj
>>176
slice

178デフォルトの名無しさん2016/11/06(日) 13:37:48.19ID:+j3xqinH
こんなもんfooのほうを変えるべきだろう

179デフォルトの名無しさん2016/11/06(日) 13:41:52.43ID:6TZQqHcY
>>176
後出しでそんなこと言われてもねぇ…
そもそも foo で何をやりたいかにもよるし

180デフォルトの名無しさん2016/11/06(日) 14:28:52.63ID:8WadcDvl
あ、sliceで出来たのでもういいです
またなんかあったら聞きます

181デフォルトの名無しさん2016/11/06(日) 15:57:30.38ID:6TZQqHcY
> あ、sliceで出来たのでもういいです
こういう余計な一言はやめた方がいいよ

182デフォルトの名無しさん2016/11/06(日) 16:01:04.07ID:YPGx/bgn
2ちゃんではよくあること
あいさつ代わり

183デフォルトの名無しさん2016/11/06(日) 18:23:47.88ID:Mq0g4tm5
Rubyでは代入演算子を再定義できないというのを知らなかったんですが
ではこうしたい場合はどうするんでしょう?

class Hoge
 attr_accessor(:array, :number)
 # いろいろ
end
みたいなClassがあったとして

hoge = Hoge.new
hoge = piyo

としたときにpiyoがどんなものかによって処理を分けたいのです
(具体的にはpiyoがArrayならarrayに入れる、 Hogeと似たようなものならアトリビュートをコピー、とか)

例えばinitialize_copyかなんかを上手く作ればそうなるよみたいな都合のいい話はないですか?
それとも素直にHogeにset(other)みたいなメソッドを定義するべきでしょうか

184デフォルトの名無しさん2016/11/06(日) 18:32:02.92ID:NZCpJm/D
そんな馬鹿みたいなクラスは作らないから答えようがない

1851832016/11/06(日) 19:02:10.01ID:Mq0g4tm5
Rubyだと全部参照渡しだし = なんかは使わなそうですね
素直にメソッド作ります

186デフォルトの名無しさん2016/11/08(火) 01:53:05.89ID:M6Rn2+El
確かRubyには、scala, Haxe みたいな、switchでのパターンマッチが無いよな

そもそも動的言語で、型によって分岐するのは、設計がおかしい

ちゃんと設計すれば、継承・インターフェース・ダックタイピングのオーバーロードで、
自然と型による分岐が無くなるはず

187デフォルトの名無しさん2016/11/08(火) 03:24:23.45ID:107xoCwk
黒アワビ濡れ濡れお色気ビラビラ仕様のRuby
公開おなほ
すとーるまんこはかきたれ

188デフォルトの名無しさん2016/11/08(火) 06:17:48.12ID:ykrZTa7U
> 0001: 訪問:2016/11/06(日) 14:32
> 会社A
> 担当者BB
> 0002: 取引先:2016/11/07(月) 09:36
> 企業CCC
> 相談人DDDD EEEEEの件で契約

というtxtファイルを

> log=会社A\t担当者BB
> log=企業CCC\t相談人DDDD\tEEEEEの件で契約

という形に置換して出力するバッチを作りたいと思っています。

> Rubyはじめました: rubyでファイルの内容の一部を置換する
http://myruby.seesaa.net/article/125577047.html
こちらを参考に

> f=File.open("input.txt","r:utf-8")
> buffer = f.read();
> p buffer
> # 中身を変換
> buffer.gsub!(/^[\d]{4}\:.*\:[\d]{2}\n/, "log=")
> p buffer
> f=File.open("output.txt","w:utf-8")
> f.write(buffer)

を書いてみたのですが、以下の置換も一つの.rbファイル内で続けて動作させるにはどうすればいいでしょうか
よろしくお願いします

buffer.gsub!(/\n/, /\t/)
buffer.gsub!(/\tlog\=/, /\nlog\=/)

189デフォルトの名無しさん2016/11/08(火) 11:49:52.31ID:ZBAGJV1u
つぎのかたどうぞ

190デフォルトの名無しさん2016/11/08(火) 14:05:34.46ID:LTPhc021
特定のウェブページを毎日チェックして、アルバイト、居酒屋 など、決まった文字列が掲載されてたら通知するandroidアプリを作りたいんですが、こういうの何て言いますか?

191デフォルトの名無しさん2016/11/08(火) 14:21:37.68ID:RD7eA5MT
バイト探し

192デフォルトの名無しさん2016/11/08(火) 14:26:41.88ID:ZBAGJV1u
スクレイピング
ボット
PIM

193デフォルトの名無しさん2016/11/08(火) 15:04:04.37ID:LTPhc021
>>192ありがとうございます

194デフォルトの名無しさん2016/11/08(火) 16:52:52.70ID:ic1oOtKi
ちなみにスクレイピングは逮捕例もあるよ

195デフォルトの名無しさん2016/11/08(火) 19:51:30.63ID:M6Rn2+El
>>188
> buffer.gsub!(/^[\d]{4}\:.*\:[\d]{2}\n/, "log=")
> p buffer
この後に、

buffer.gsub!(/\n/, /\t/)
p buffer

buffer.gsub!(/\tlog\=/, /\nlog\=/)
p buffer

エラーが起こった際、デバッグしにくいけど、
メソッドチェーンで、どんどんつなげていく事もできる

buffer.gsub!(/^[\d]{4}\:.*\:[\d]{2}\n/, "log=")
.gsub!(/\n/, /\t/)
.gsub!(/\tlog\=/, /\nlog\=/)

196デフォルトの名無しさん2016/11/08(火) 19:55:50.26ID:ykrZTa7U
>>195
ありがとうございます!!!!!!!!!

197デフォルトの名無しさん2016/11/08(火) 22:18:28.32ID:ykrZTa7U
>>195
無事に動きました!
助かりました、ありがとうございます

198デフォルトの名無しさん2016/11/10(木) 06:58:06.00ID:MLyRIdhy
基本的な部分なのですが
hashオブジェクトをto_aした場合に返値される配列の順序は
hashオブジェクトにキーを設定した順序でいいのですか?

199デフォルトの名無しさん2016/11/10(木) 08:00:08.45ID:+0vOVL7/
極端に古いバージョンでない限りはそれでいい

200デフォルトの名無しさん2016/11/10(木) 12:26:51.61ID:Sha7NYgb
実装はそうなってるけど仕様で保証されてたっけ?

201デフォルトの名無しさん2016/11/10(木) 13:33:15.27ID:dxAJlx69
今のバージョンは保証してる

202デフォルトの名無しさん2016/11/10(木) 14:27:24.56ID:LGdObFSz
どうゆう理由でハッシュキーの順序を保証するようになったんかね
他の言語では基本順序は保証されていないよね(´・ω・`)

203デフォルトの名無しさん2016/11/10(木) 14:47:43.59ID:dxAJlx69
>>202
>どうゆう理由で

エンジンが変わった

204デフォルトの名無しさん2016/11/10(木) 15:04:32.11ID:o6QUnq5t
順序に依存したコードを書きたい人の声が大きかったから

205デフォルトの名無しさん2016/11/10(木) 22:33:15.81ID:+0vOVL7/
順序を保持するためだけにハッシュ表とは別にわざわざ無駄な線形リストを持ってるんだぞ
決して、たまたま順序通りになるようなアルゴリズムを選んだとか、
順序通りになるようにハッシュ表の実装を工夫したとかではなく、無理に明示的に順序を持たせてある

206デフォルトの名無しさん2016/11/10(木) 23:18:15.82ID:pEVMYV3p
一般的には、Hashには2種類ある

Hash は順序なし。
Ordered_Hash は追加した順番で、順序あり

207デフォルトの名無しさん2016/11/10(木) 23:44:37.48ID:+0vOVL7/
順序付きのハッシュ表自体が一般的ではないだろ
RubyのHashは>>205で書いたとおりハッシュ表とは無関係に順序持たせてるし、
.NETのSortedDictionaryみたいに辞書の実装で要素をキーでソートされた状態で持つのはよくあるけど
あれはハッシュ表じゃなくて二分木やバイナリサーチだし

208デフォルトの名無しさん2016/11/11(金) 03:16:24.93ID:wVch1D/r
yield の意味が理解できません
例えば下記ってどんなことしてるんでしょうか?

https://github.com/fluent/fluentd/blob/master/lib/fluent/plugin/parser_regexp.rb

def parse(text)
m = @regexp.match(text)
unless m
yield nil, nil
return
end

r = {}
m.names.each do |name|
if value = m[name]
r[name] = value
end
end

time, record = convert_values(parse_time(r), r)
yield time, record
end

yield nil, nil

yield time,record

二つあるけどさっぱりです

209デフォルトの名無しさん2016/11/11(金) 07:13:41.60ID:LSv6brFn
>>208
ブロック付きでこのメソッドを呼ぶと、yield のタイミングでブロックが実行される

parse('hoge') { |t, r| p [t, r] }

という風にすると、yield の内容が表示される

210デフォルトの名無しさん2016/11/11(金) 08:58:07.26ID:ENznHnYU
Rubyのyieldはただのコールバック関数呼び出しの
シンタックスシュガーだからなぁ。
JavaScriptでかけばこんな感じだよ。

a = [1, 2, 3, 4]

forEach(a, function(i) {
 return i * 2
})

function forEach(arr, block) {
 var ret = []
 for (var i = 0; i < arr.length; i++) {
  ret[i] = block(arr[i])
 }
 return ret
}

あとは書き方程度の問題。ブロックが引数の最後の一つである場合に限り
引数のblockコールバックを省略することが出来て、代わりにyieldを使って
そのコールバックが呼び出せるってだけ。

211デフォルトの名無しさん2016/11/11(金) 09:55:02.27ID:e7T2VXvj
pythonのyieldとはだいぶ違ってた

212デフォルトの名無しさん2016/11/11(金) 14:39:07.80ID:kzNknik+
初めて書き込みます。windowsで、rubyをインストールしました。helloruby.rbと書くと、内部コマンドまたは〜というエラーメッセージが出ます。何が原因だと思いますか?

213デフォルトの名無しさん2016/11/11(金) 18:33:52.72ID:+0sZIajy
>>212
エスパーするとパス通せ

214デフォルトの名無しさん2016/11/11(金) 18:58:09.57ID:XRaelh1g
>>213
返信ありがとうございます。
ruby -vではきちんとバージョンが表示されるのに、helloruby.rbと書くと内部コマンド〜とエラーメッセージが出ます。この場合どのようにしたら良いのでしょうか?自分なりに調べたのですが全く情報が出てこず…。初心過ぎる質問で申し訳ありません。

215デフォルトの名無しさん2016/11/11(金) 19:01:01.28ID:UQPlBidt
どのwindowsにどのruby入れてどんなエラーが出たか全部書いて

216デフォルトの名無しさん2016/11/11(金) 20:13:58.18ID:JZCe9Y2P
最近の Windows は .rb を実行可能に出来るん?

217デフォルトの名無しさん2016/11/11(金) 20:18:26.25ID:UQPlBidt
それは普通に出来る

218デフォルトの名無しさん2016/11/11(金) 20:55:45.18ID:xrgRbR8m
ruby helloruby.rb かな?

2191012016/11/11(金) 21:53:06.05ID:goTatCVE
毎日定時帰りしたら首になりそう

■使用するプログラミング言語/ツール/特殊技術
・Ruby on Rails
・MySQL / PostgreSQLなどのデータベース技術
・Javascript(jQuery)の技術
・サーバ構築、管理の技術(AWS)
・HTML / CSSの技術(ウェブページのコーディング技術)

■月給20万〜
※経験・スキルを考慮のうえ、当社規定により優遇いたします。
※上記給与に、見込残業代35時間分43,000円分を含みます。
 (見込残業代 月35時間分を超過した場合は別途支給)

220デフォルトの名無しさん2016/11/11(金) 23:39:57.27ID:N42G00o6
43,000 / 1.25 / 35 ≒ 980

221デフォルトの名無しさん2016/11/11(金) 23:46:59.86ID:LSv6brFn
この時代にjQueryはないわー

222デフォルトの名無しさん2016/11/12(土) 03:08:59.71ID:SNnuUkOH
月35時間残業して給料20万…
しかも手取りですら無いという
これはヤバイわ

223デフォルトの名無しさん2016/11/12(土) 03:41:54.01ID:fAGx8Up8
>>221
RailsでjQuery以外を使おうと思ったら苦難の道で?w

224デフォルトの名無しさん2016/11/12(土) 03:52:09.03ID:fAGx8Up8
訂正
RailsでjQueryの代わりに導入すべきと言われるフレームワークを使おうと思ったら苦難の道やで?

jQueryを含め単なるライブラリ程度であれば簡単に使えるけど
AngularとかReactとかJavaScriptのフロントエンドフレームワークを
組み合わせる方法をRailsは用意していない。

Rails 5でAPIモードというJavaScriptのフレームワークを使う前提のモードができたけれども、
ぶっちゃけこれRailsの便利な機能の多くが非推奨になりましたって言ってるようなもんだからねw
ビューがバッサリなくなって、コントローラーの機能も必要最小限になる。

その分をJavaScritフレームワークで実現するんだけど、Railsにはそれらと組み合わせる機能がかけている。
RailsでJavaScriptのテストはどうやれば良いんだ?レベル。

225デフォルトの名無しさん2016/11/12(土) 04:16:39.20ID:eAhK3KJp
朝っぱらから気合い入った長文乙

226デフォルトの名無しさん2016/11/12(土) 04:22:33.43ID:6wPviZ3t
>>219
35時間残業して43,000円にしかならないのか

227デフォルトの名無しさん2016/11/12(土) 04:25:14.43ID:6wPviZ3t
>>224
どうせなんでもjsonで出し入れするんだから
viewなんていらないしrailsである必要すらない

228デフォルトの名無しさん2016/11/12(土) 04:33:26.95ID:fAGx8Up8
>>225
あ、朝?

普段君が何時頃に起きなきゃいけない生活なのかがよく分かるわ。

こっちは会社まで徒歩でも30分。出社時間が一応10時で(基本的に残業なし)
Slackに書くだけで私用を理由に自宅作業したり早く退社してもOK
遅刻とかそういう概念もないんでw

229デフォルトの名無しさん2016/11/12(土) 04:36:08.01ID:fAGx8Up8
>>227
> viewなんていらないしrailsである必要すらない

その通り。Railsの終焉が見えるよねw
ちなみに俺はRubyよりもJavaScriptの方が好き。

メインはJavaScriptで、その背後にあるサーバーは
なんでもいいという時代かな。

230デフォルトの名無しさん2016/11/12(土) 04:55:24.42ID:W5RGEoAt

231デフォルトの名無しさん2016/11/12(土) 05:00:57.16ID:fAGx8Up8
>>230
世の中にはかわいそうな会社があるねとしか
見てなかったwww

232デフォルトの名無しさん2016/11/12(土) 07:15:36.64ID:UXa3WItJ
>>229
だったらなんでRubyスレを覗いてるんだろうか?
嫌いなRubyを叩いて憂さ晴らしをしたいのかな?

233デフォルトの名無しさん2016/11/12(土) 07:54:30.01ID:SNnuUkOH
ちょっと上で暴れてたRuby使わなきゃならなくなったJS大好きなロリコンだろ
もう触るなよ

234デフォルトの名無しさん2016/11/13(日) 11:27:30.83ID:8tp89YW7
本屋行ったらPython本増えたなあ
Rubyで機械学習って本書いたら…売れねえか

機械学習や人工知能という神風が吹いて国内でもPythonに完敗なんだろうな

235デフォルトの名無しさん2016/11/13(日) 11:52:13.63ID:hnH+OR8d
マルチ誰得

236デフォルトの名無しさん2016/11/13(日) 12:15:30.12ID:T5+9PjbV
>>234
もう勝負は着いてるんだからみっともないことはやめなさい
この国のITはガラパゴス化した技術に拘って世界に取り残されるという失敗をさんざん繰り返してきたというのに、またその例を増やす気か

237デフォルトの名無しさん2016/11/13(日) 15:44:25.64ID:e+lvJCbH
久々にリアル本屋行ってみたら
Rubyの棚よりPythonの棚の方が大きくなってた
胸熱

データサイエンティストのみなさんのおかげですωωω

238デフォルトの名無しさん2016/11/13(日) 20:44:27.50ID:5YmDMkhP
Rubyってコンパイル型にできないの?
例えば Cなら、 cc hoge.c | ./a.out にすればインタプリタ型になるし、
実行ファイルも残る。
Rubyではコンパイルと実行を分割して実行ファイルを残す方法ってないのかな。

239デフォルトの名無しさん2016/11/13(日) 20:59:12.44ID:miyqCymn
おます

240デフォルトの名無しさん2016/11/14(月) 02:10:30.72ID:XIKx0ys+
>>219
同じことしているのに ニートの俺には給与ないんだけど・・・
あと最近はSwiftでスマホアプリ作って遊んでる

こんなの仕事でやったら闇落ちしそうなので プログラマとして働くつもりないけど
まぁそれ以前に、実務経験ないから雇ってもらえないねん _(:3 」∠)_=3

241デフォルトの名無しさん2016/11/14(月) 04:04:12.28ID:OCTkBwGI
Rubyはいいと思うが、なかなか覚えられない。結局ちょっとした処理をしようと
すると、C#とかを引っ張り出してくる。Shell感覚で使えたら最高だと思うが
普通はmouseだし、Tool系はTCLだし。
Rubyって主にどういう場面でつかうんだ?

242デフォルトの名無しさん2016/11/14(月) 05:24:04.01ID:esjkHDa1
>>240
ハローワークに、プログラミングを未経験・独学で勉強している人の募集も一杯ある

243デフォルトの名無しさん2016/11/14(月) 06:41:55.09ID:aL/Lu1lD
>>241
今のRubyはRailsのDSLだよ
知らなかったの?

244デフォルトの名無しさん2016/11/14(月) 06:55:39.43ID:5ieSClDh
>>241
刑務所で講習用

245デフォルトの名無しさん2016/11/14(月) 07:01:01.48ID:U3HMZCux
>>241
Unix 上でちょっとしたことをしたいとき用言語としてよく使うよ
まさに昔の Perl の代替

246デフォルトの名無しさん2016/11/14(月) 07:13:45.48ID:aL/Lu1lD
Rubyは入ってなかったり入っててもバージョンが古いことが多いからなあ
Perlの代わりに使うのは厳しいわ

247デフォルトの名無しさん2016/11/14(月) 07:37:53.70ID:U3HMZCux
>>246
手元でやるだけのちょこっとしたことだから、ポータビリティは必要ない
ごく一部の例でいえば、何かが吐き出したlogファイルをサクッと解析させたりとかね

248デフォルトの名無しさん2016/11/14(月) 08:03:38.77ID:esjkHDa1
Ruby, Groovy は、DSL向き。
SASSも、Ruby

また、設定ファイルとしても読みやすいから、Chef, Puppet でも使われている

「たのしいRuby」など、良本が揃っているから、勉強しやすく、Java, C#ほど難しくない

また、Rubyから静的言語の、Elixir, Haxe, Kotlin などへ移りやすい

249デフォルトの名無しさん2016/11/14(月) 10:42:07.67ID:AJSSB3HL
>>215

>>214です。windows8にruby23-x64を入れました。
helloruby.rbと打つと、

’helloruby.rb’は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。

と出ます。

250デフォルトの名無しさん2016/11/14(月) 10:42:37.62ID:AJSSB3HL
認識させるにはどうしたらいいのでしょうか?

251デフォルトの名無しさん2016/11/14(月) 11:01:12.14ID:CNrivUWZ
perlの代わりならpython

rubyは見た目perlに似てるだけでperlの代わりにはならない

252デフォルトの名無しさん2016/11/14(月) 11:03:12.46ID:CNrivUWZ
>>250
mingw/msys入れろ

253デフォルトの名無しさん2016/11/14(月) 11:28:33.20ID:d18MPt7T
>>249
ruby 〜スクリプトのパス/helloruby.rb
ってやってる?

254デフォルトの名無しさん2016/11/14(月) 11:36:27.20ID:igQzh1Us
ttp://www.atmarkit.co.jp/ait/articles/0410/09/news012.html

255デフォルトの名無しさん2016/11/14(月) 11:40:58.22ID:igQzh1Us
こっちね
ttp://www.atmarkit.co.jp/ait/articles/0701/27/news021.html
ttp://www.atmarkit.co.jp/ait/articles/0410/09/news012.html
ttp://www.atmarkit.co.jp/ait/articles/1303/15/news042.html

256デフォルトの名無しさん2016/11/14(月) 11:49:25.61ID:igQzh1Us
コマンドプロンプトを開いて次の2行を実行

assoc .rb=Ruby.File
ftype Ruby.File="C:\(Rubyのあるpath)\ruby.exe" "%1" %*

・パスは適切なものを選ぶ
・管理者アカウントで実行 (runas /administrator とかでも可能)

257デフォルトの名無しさん2016/11/14(月) 12:42:24.19ID:XIKx0ys+
>>242
うち 田舎やけん
そんなハイカラな仕事する会社ないんよ

258デフォルトの名無しさん2016/11/14(月) 18:36:58.46ID:6IAxrkLB
Ruby → JavaScript, Python とかの互換が簡単にできて、
これらを取り込んでしまえばRubyにもそれなりの存在意義は
ある気がするな。逆は難しいだろうから。

259デフォルトの名無しさん2016/11/15(火) 02:36:49.43ID:APHjFyJV
Haxe(ヘックス)はOSSで、JSに型チェックを付けたような言語で(altJS)、
JS(ES5), Flash, PHP, C++, Java, C#, Python に書き出せる。
Windows8.1対応。IDEは、FlashDevelop

このサイトで、ブラウザでプログラミングして、実行できる
Try Haxe !
try.haxe.org/

Haxeプログラミング入門、尾野政樹、2015

Haxeからも、Rubyへ変換できない。
何かの言語から、Rubyへ変換できればなあ

260デフォルトの名無しさん2016/11/15(火) 04:34:06.60ID:sHZUXp5G
>>259
(*'ω'*)それを君が開発すればイイジャマイカ スルメイカ

261デフォルトの名無しさん2016/11/15(火) 04:48:52.90ID:ulUg8AFG
>>259
Julia

262デフォルトの名無しさん2016/11/17(木) 21:43:20.86ID:mx0eMjxm
今ってあれだよなElixir待ちって感じだよな
Pythonとの勝敗はほぼ付いてしまった。
ElixterはRuby互換あるといいな。

263デフォルトの名無しさん2016/11/17(木) 23:34:45.90ID:iGNJFpBr
静的型検査のない関数型とかゴミカスだろ
コードの正しさが自明という関数型最大のメリットが半減してる

264デフォルトの名無しさん2016/11/18(金) 16:09:55.66ID:vbdBJsNN
○ erlang
× elixir

erlangの良いところをつぶしたのがelixir

265デフォルトの名無しさん2016/11/18(金) 16:38:53.40ID:1sC7EnMR
じゃあRuby3待ちも加えよう

266デフォルトの名無しさん2016/11/20(日) 15:31:53.51ID:Nkcoggcj
Rubyの資格勉強をしていて
getsというのはダンディ板野なのではなく、
get-stringのことなのだと分かった。

267デフォルトの名無しさん2016/11/21(月) 09:22:12.04ID:yuIFR8QG
>>219
こんな規則なんの効力もないのに

268デフォルトの名無しさん2016/11/21(月) 09:37:40.89ID:0N8j/p/K
>>248
> Ruby, Groovy は、DSL向き。

どこからどう見てもRubyのコードなのに
それをDSLとか呼ぶのやめようぜw
doとか出てきた時点で萎える

269デフォルトの名無しさん2016/11/22(火) 11:31:16.12ID:bGBSJtcd
Windows7-Home Ruby 1.8.6

http://qiita.com/mogulla3/items/fbc2a46478872bebbc47
にある「1度に全体を読み込む」を使ってバイナリファイルを読み込&表示しました。

※目的のバイナリファイルはテキスト化すると1行&30文字程度
※プログラムコードは  File.rb で、コマンドプロンプトで ruby File.rb で実行

動作自体は上手く行ったのですが、動作時に「ピッ!」と音が毎回鳴ります。
これは何を意味しているのでしょうか?

270デフォルトの名無しさん2016/11/22(火) 11:32:44.53ID:Pvp5yOqg
バイナリファイルなら0x07で音がでる

2712692016/11/22(火) 11:44:14.33ID:bGBSJtcd
>>270
早速どうも。 バイナリファイルの性(さが)なんですね

272デフォルトの名無しさん2016/11/22(火) 11:56:40.62ID:9QZ/pTkg
ベル文字(ベルもじ、BEL: bell character)またはベルコード(bell code)とは、制御文字の一種である

ベル文字は、ASCIIとUnicodeでは十進数で7、十六進数で0x07に割り当てられている。
キャレット記法では ^G と表され、Unicodeでは制御文字の図形表現として(U+2407)が定義されている

Rubyは実行環境に、RubyVMを使った、1.9以降を使った方がいい

2732692016/11/22(火) 12:10:26.36ID:bGBSJtcd
>>272
なるほど。 新しいRubyを使ってみます。 今のRuby1.8.6 は応急のテスト用なので

274デフォルトの名無しさん2016/11/22(火) 14:28:44.44ID:3UDTrTQV
sprintf("%04d",15)の4の部分に変数を使いたい場合ってどうしたらいいんでしょう?

275デフォルトの名無しさん2016/11/22(火) 14:46:36.63ID:E5xR5zcu
printf("%0*d", 4, 15)

276デフォルトの名無しさん2016/11/22(火) 15:06:37.29ID:3UDTrTQV
>>275
できました。ありがとうございます。
よく見たら書いてありました (;^_^A
https://docs.ruby-lang.org/ja/latest/doc/print_format.html

277デフォルトの名無しさん2016/11/22(火) 22:40:50.60ID:bGBSJtcd
Windows7-Pro Ruby 2.3.1 (x64)

Ruby2.3.1をインストールしバージョンの確認ができましたが、毎回 cd でディレクトリを
変えるのが面倒なので、コマンドプロンプトのショートカットをbin内に作り、このプロパティの
作業ディレクトリを変更して直で作業できるようにしました。

ここで、ショートカットのアイコンを http://uproda.2ch-library.com/95426479z/lib954264.png
の宝石型にしたいのですが、この画像はどこに保存されているのでしょうか?
あるいはWebのどっかでDLできますか?

278デフォルトの名無しさん2016/11/22(火) 23:08:14.78ID:qW+6ZAFd
googleで画像検索してみたら?

2792772016/11/22(火) 23:12:23.05ID:bGBSJtcd
>>278
したけど無かったです。 Windowsのアイコン一覧にも無かった

280デフォルトの名無しさん2016/11/22(火) 23:27:14.21ID:qW+6ZAFd
http://uproda.2ch-library.com/95426479z/lib954264.png を右クリックして保存でもいいな

281デフォルトの名無しさん2016/11/22(火) 23:50:51.41ID:VrepQFzl
ruby.exeに埋め込まれてた気がする
アイコン選ぶときにexeって選べなかったっけ?
無理ならResource Hackerかなんかで抽出

282デフォルトの名無しさん2016/11/23(水) 00:00:26.69ID:fCj7qIPS

2832772016/11/23(水) 00:34:35.33ID:XRl7gwFc
>>281
ショートカット用です


>>282
http://uproda.2ch-library.com/9542717c9/lib954271
http://uproda.2ch-library.com/9542717c9/lib954271.ico
共に見れないです。 というかDLキーを入力する欄が無い

284デフォルトの名無しさん2016/11/23(水) 01:06:25.90ID:tyNVpJn+

285デフォルトの名無しさん2016/11/23(水) 02:10:56.09ID:tyNVpJn+
>>277
http://u1.getuploader.com/sample/download/11532/sample_11532.zip
rubyinstaller.org の画像を使って作ってみた 👀
Rock54: Caution(BBR-MD5:09d9d5ea29ae030fc5f15f1492842ada)

2862772016/11/23(水) 02:25:08.36ID:XRl7gwFc
>>285
あんがと

287デフォルトの名無しさん2016/11/24(木) 13:46:49.29ID:SaghWnm/
replace.rbを実行すると、

source.datファイル
文字
#kokokara
書き換えたい文字
#kokomade
文字
て感じでコメントで囲まれた部分のみ書き換えたい。
どうすればいい?

288デフォルトの名無しさん2016/11/24(木) 14:14:50.38ID:ZpQTd+Xn
buff = ''
File.open('source.dat'){|fh| buff = fh.read.sub( /(?=#kokokara)(.*?)(?>#kokomade)/m ){ '書き換え' } }

289デフォルトの名無しさん2016/11/24(木) 14:38:01.91ID:SaghWnm/
ありがとうございます

290デフォルトの名無しさん2016/11/24(木) 18:44:14.32ID:v6KW5pDh
Timeをnewしたり加減算する時に都度丸めずとも
はじめから分未満を丸めるgemとかありますか?

291デフォルトの名無しさん2016/11/24(木) 23:46:30.89ID:g1cJ7kXy
Railsならメソッドチェーンで、1週間前・後を、
1.weeks.ago, 1.days.from_now

など、色々な表現ができるから、探してみれば?

292デフォルトの名無しさん2016/11/25(金) 00:39:15.70ID:6I1tAUNu
自前でTimeにモンキーパッチ

2932882016/11/25(金) 15:35:05.30ID:K8sLqeeD
>>287
ごめんなさい、大嘘書いてた
(?=...)(.*?)(?>...) は間違いで、
(?<=...)(.*?)(?=...) として後読みと先読みで囲って、$1 に書き換え前の文字列
buff = File.open('source.dat'){|fh| fh.read.sub( /(?<=#kokokara\n)(.*?)(?=#kokomade)/m ){ "書き換え\n" } }
マーカーを消したかったら
buff = File.open('source.dat'){|fh| fh.read.sub( /#kokokara(.*?)#kokomade/m ){ "書き換え" } }

294デフォルトの名無しさん2016/11/26(土) 15:01:36.97ID:mx1WdaLu
>>293
>( /(?<=#kokokara\n)(.*?)(?=#kokomade)/m )

^ を付けて、#kokokara, #kokomade を、行頭に限定した方がいいかも
( /(?<=^#kokokara\n)(.*?)(?=^#kokomade)/m )

295デフォルトの名無しさん2016/11/28(月) 17:29:57.45ID:S7Gjt5Bx
【12月14日】    日本発の世界恐慌!   【米利上げ】


12月14日に利上げをしたら、世界中の株価暴落になる、100%間違いない。https://youtu.be/90hYAE_NDNY

終いには政府にも支えることができなくなり、どん底に落ちていきます。日本政府がアメリカ国債の25%を引き出すと世界経済が破綻し、マイト レーヤは出現するでしょう。マイト レーヤが公に現れるにつれてUFOが、とてつもない数で姿を表すでしょう。


タクシー運転手(65)が意識失い死亡 千葉http://headlines.yahoo.co.jp/hl?a=2016112

認知症の過程は放射能汚染によって加速します。問題は、多くの人々が放射能の影響で死んでいるのに、日本政府が何も認めないことです。マイト レーヤは原発の閉鎖を助言されます。非常に間もなくマイト レーヤをテレビで見るでしょう。彼は「匿名」で働いております。

296デフォルトの名無しさん2016/11/28(月) 22:42:18.84ID:padn7mYh
yield についてドラえもんを例に説明してくれ。

297デフォルトの名無しさん2016/11/30(水) 20:00:09.42ID:PNa3/H0Q
ミニツクが復活している・・・

298デフォルトの名無しさん2016/11/30(水) 20:06:58.40ID:SfFGX6QD
ミニツクの初心者用コースってコードの実行例で結構間違いあるよね
ホントの初心者だと迷いそうだわ(´・ω・`)

299デフォルトの名無しさん2016/11/30(水) 22:11:42.44ID:0zul0T3a
ENV['my_application_variable'] = '1' if ENV['my_application_variable'].blank?

2回でてくるmy_application_variableがdryじゃないんで
嫌なんですけど、これを短く書く方法はないですか?

条件
・使っているライブラリの仕様上、環境変数にいれなければならない。
・空文字でも'1'を入れる必要があるので、||=は使えない。
・Railsで使えるメソッドは使ってOK


条件付き代入みたいなものないかね?

300デフォルトの名無しさん2016/12/01(木) 07:43:04.07ID:91ReGJeh
MAV = 'my_application_variable'

ENV[MAV] = '1' if ENV[MAV].blank?

301デフォルトの名無しさん2016/12/01(木) 09:40:44.58ID:d1oSzjmi
>>300
二行になってローカル変数が増えてる。
もっとマシな方法ないの?

302デフォルトの名無しさん2016/12/01(木) 12:11:29.17ID:5zfWITAP
ENV['my_application_variable'] = '1' when blank

303デフォルトの名無しさん2016/12/01(木) 21:04:29.89ID:d1oSzjmi
だめみたいね。ここまでか

irb(main):001:0> ENV['aaa'] = '1' when blank
SyntaxError: (irb):1: syntax error, unexpected keyword_when, expecting end-of-input
ENV['aaa'] = '1' when blank
^
from /usr/bin/irb:11:in `<main>'

304デフォルトの名無しさん2016/12/01(木) 21:19:40.96ID:2IFm11I0
rubyのhashは初期値設定できた

305デフォルトの名無しさん2016/12/01(木) 21:46:59.02ID:qbmZssP5
呼び出すときにこうするとか
ENV['my_application_variable'].to_s.sub(/\A\z/, '1')

ライブラリで使うみたいだし無理か

306デフォルトの名無しさん2016/12/01(木) 21:52:22.17ID:2IFm11I0
ENV.fetch('myhoge', '1')

307デフォルトの名無しさん2016/12/01(木) 22:53:15.81ID:3crCXgJS
いいじゃんそれで
他にやることあると思う

308デフォルトの名無しさん2016/12/01(木) 22:58:11.96ID:N8O9wUz9
DRYにこだわりすぎてもダメだしな
DRYはメンテナンスしやすくするためのいち手段
手段が目的になってはいけない

309デフォルトの名無しさん2016/12/02(金) 00:18:59.48ID:tqwX+tIq
でももしこれが可能ならDRYにするんでしょ?

手段が〜とか出来ないことの言い訳にしか見えないよ。

310デフォルトの名無しさん2016/12/02(金) 04:38:07.11ID:RG701yLz
>・空文字でも'1'を入れる必要があるので、||=は使えない。
この条件がある以上は自分で用意するしか無いね
Hashにモンキーパッチでもすればいいよ

311デフォルトの名無しさん2016/12/02(金) 06:57:28.44ID:8YvcaX3X
というか元々の仕様上堂々と2行分の処理だよね
勝手に「こんなの簡単でしょ1行でサクッとできるでしょ」とか言われてもギリっと歯を噛むしか

312デフォルトの名無しさん2016/12/02(金) 07:15:46.16ID:ODJLJCqj
つか、環境変数が空文字列ってありえるのか?
設定されてない場合は nil が返るはずなんだが…

$ HOGE=""
$ ruby -e 'p ENV["HOGE"]'
nil

313デフォルトの名無しさん2016/12/02(金) 08:02:05.09ID:JTKNeiyC
>>312
それシェル変数。export しないと子プロセスに渡らない。

ついでに言うとスペース一個とかでも blank? は真になる。

314デフォルトの名無しさん2016/12/02(金) 15:45:28.28ID:ocojT6FV
macroで済ませたいところ

315デフォルトの名無しさん2016/12/02(金) 16:12:34.82ID:Yd67HXR2
crystal使おう

316デフォルトの名無しさん2016/12/04(日) 12:40:41.70ID:ytM7QMnr
def foo (*args)
p args
p args[0]
p *args
end

foo [1,2,3]

出力結果

[[1,2,3]]
[1,2,3]
[1,2,3]

最後の
p *args
の意味が分からないのですが、どういう構文なのでしょうか?

317デフォルトの名無しさん2016/12/04(日) 12:47:37.04ID:HCAAGxQ4
*はsplatと呼ばれる
直後のオブジェクトにto_aをかけると思ってもらうといい

318デフォルトの名無しさん2016/12/04(日) 13:08:08.37ID:tKcWat/f
>>316
配列の展開では。
irb(main):001:0> a=[1,2,3]
=> [1, 2, 3]
irb(main):002:0> print a
[1, 2, 3]=> nil
irb(main):003:0> print [1,2,3]
[1, 2, 3]=> nil
irb(main):004:0> print *a
123=> nil
irb(main):005:0> print 1,2,3
123=> nil

319デフォルトの名無しさん2016/12/04(日) 13:27:46.42ID:ytM7QMnr
>317

ありがとうございます。

>318

irb(main):001:0> a = [1,2,3]
=> [1, 2, 3]
irb(main):002:0> *a
SyntaxError: (irb):2: syntax error, unexpected '\n', expecting '='
from C:/Ruby21-x64/bin/irb:11:in `<main>'

*aの評価値を見ようとしていてうまくいかなくてどうなっているんだ、と思ってたのですが、pすればいいんだ。
(expecting '=' で気づけ、自分)
納得いきました。ありがとうございました。

320デフォルトの名無しさん2016/12/05(月) 15:27:42.33ID:dF177W8B
メモ
SQLインジェクション対策もれの責任を開発会社に問う判決 | 徳丸浩の日記
http://b.hatena.ne.jp/entry/blog.tokumaru.org/2015/01/sql.html

321デフォルトの名無しさん2016/12/06(火) 01:28:22.79ID:HR1yYwh6
Ruby の C 言語による拡張ライブラリを作成して実行しているのですが,
再現性の無いバグに悩まされています.同じプログラムを5回動かすと4回ぐらいコケて,
下に示すようなエラーが出力されます.
同じライブラリを C 言語プログラムから呼び出すとエラーが出力されません.
そのため,gdb 等でのデバッグが出来ません.

-- Crash Report log information --------------------------------------------
...
-- Control frame information -----------------------------------------------
...
-- C level backtrace information -------------------------------------------

-- Other runtime information -----------------------------------------------
...

C 言語プログラムから呼び出すとエラーが出ないということは,
rb_define_class 等で定義しているラッパ部分の記述に問題が有るような
気がしていますが,printf によるデバッグで場所を特定出来ないでおります.
また,問題は C level backtrace information のところに出力がされないことだと
思っているのですが,ココに何か出力させるには,gcc -g のオプション以外に
何か必要なのでしょうか?

3223212016/12/06(火) 01:29:36.00ID:HR1yYwh6
ちょっと古いけすけど,ruby 2.0.0, OSX,xcode の gcc を使っています.

3233212016/12/06(火) 01:31:37.05ID:HR1yYwh6
extconf.rb から出力された Makefile をそのまま利用しています.

324デフォルトの名無しさん2016/12/06(火) 12:07:10.61ID:SXsp+YBz
ソース貼れ

325デフォルトの名無しさん2016/12/06(火) 13:05:53.77ID:Kn1BSDAJ
テキストファイルから正規表現の条件にマッチする数列のみを取り出すプログラムを作りたい。

#number.txt
139
134
243
154
265


datafile =

326デフォルトの名無しさん2016/12/06(火) 13:07:05.86ID:Kn1BSDAJ
テキストファイルから正規表現の条件にマッチする数列のみを取り出すプログラムを作りたい。

#number.txt
139
134
243
154
265


datafile = "number.txt"
File.open(datafile) do |f|
f.each_line do |line|
p /^[1][3][0-9]$/ =~ line
end
end

これだけだと
0
0
nil
nil
nil
と出力されてしまう。
139
134
と出力するにはどうしたらいいか。

327デフォルトの名無しさん2016/12/06(火) 13:30:50.46ID:rcXtUD5h
>>326
/re/ =~ str の戻り値自身はマッチした位置情報のみを返す
0は0文字目でマッチしたという意味でnilはマッチしなかったという意味
マッチした文字列を利用したい場合は今後のことも考えて()を使う
正規表現内の1番目の()で囲った正規表現にマッチした文字列は変数 $1 か String#matchの戻り値[1] で利用できる
irb> p $1 if '1122334455' =~ /([2]+)/
"22"
irb> m = '1122334455'.match(/([2]+)/); p m[1] if m
"22"

よってスクリプトはこんな感じになる
datafile = "number.txt"
File.open(datafile) do |f|
f.each_line do |line|
matched = line.match(/^([1][3][0-9])$/)
p matched[1] if matched
end
end

328デフォルトの名無しさん2016/12/06(火) 13:35:42.41ID:ui9UYxht
^13\d$でいいんじゃないの?

329デフォルトの名無しさん2016/12/06(火) 13:39:38.26ID:rcXtUD5h
実際はもっと長い正規表現なのかもしれないし()の利用作法だと思って混乱するのも嫌なので元の部分は極力直さなかった
個人的には\Aと\Zを使いたかったが本筋ではない

330デフォルトの名無しさん2016/12/06(火) 14:29:41.50ID:0+futo+K
$ ruby --version
ruby 2.1.10p492

word1 = /<td align="center"><a href="http:\/\/.*\/" target="_blank">/
puts line if line =~ word1
で画面に出力させることができています。後の処理で、word1の内容を置換したいのですが、
上手く行きません。
puts line = line.gsub(word1,'【')
あるいは
puts line = line.gsub(/<td align="center"><a href="http:\/\/.*\/" target="_blank">/,'【')
でもダメです。入力ファイルの全てが出てきています。
質問が的はずれかもしれませんが、=~,とgsubの正規表現は使い方が違うのでしょうか?
後者のgsubはどうすべきでしょう?

331デフォルトの名無しさん2016/12/06(火) 15:02:38.98ID:ETIaxsXC
先ほどのソースのまま
正規表現の後に
p $& とすると
139
134
nil
nil
nilとなったので
nilを表示しないようにしたい。

332デフォルトの名無しさん2016/12/06(火) 15:05:16.71ID:D3xfQ035
しないようにすれ

333デフォルトの名無しさん2016/12/06(火) 15:08:06.62ID:ui9UYxht
よくわからんが原因は他じゃないかな?
下のでちゃんと動くよ。
word1 = /<td align="center"><a href="http:\/\/.*\/" target="_blank">/
line='<td align="center"><a href="http://2ch.net/" target="_blank">置換です</a></td>'
puts line=line.gsub(word1,"きゃあー")

334デフォルトの名無しさん2016/12/06(火) 15:08:32.74ID:ETIaxsXC
if文に変えたらできました!
ありがとうございました!

335デフォルトの名無しさん2016/12/06(火) 15:20:29.06ID:my75alTQ
>>330
上にもあるが普通は欲しい部分を抜き出してから修飾する
require 'open-uri'
html = open('http://qiita.com/tags/Ruby').read
html.scan(/<div class="ItemLink__title"><a.+?>(.+?)<\/a>/).each{|v| puts v}
#結果:
CSVさえあればいい!形態素解析→単語感情極性対応表で超お手軽ネガポジ分析♪ (with Rails)
MailCatcherでメール送信をテスト
【Rails】ぼくのかんがえたさいきょうの設定(rails newそのあとに)
Rails:Service層を運用して良かったところ、悪かったところ
Rails スクレイピング手法 Mechanizeの使い方
Rails開発におけるwebサーバーとアプリケーションサーバーの違い(翻訳)
Ajaxでセレクトボックスの中身が動的に変わるRailsアプリの作り方
初心者歓迎!手と目で覚える正規表現入門・その1「さまざまな形式の電話番号を検索しよう」
...

こっちのほうが絶対に見通しがいいし作成途中での確認もカンタン
んでさらっと .+? を使ってるが「正規表現の最短マッチ」について調べるといい
わけわからん状態のところを自力でひとつづつ潰していくのだ

336デフォルトの名無しさん2016/12/06(火) 16:14:26.50ID:0+futo+K
有難うございます。
word1 = /<td align="center"><a href="http:\/\/.*\/" target="_blank">/
file.each_line do |line|
(中略)
line = line.gsub(word1,'【')
puts line if line =~ /【/
これでできました。原因は他にもありました。

337デフォルトの名無しさん2016/12/06(火) 22:40:43.49ID:N07Fi8es
>>321-323
再現性の無いバグなら、マルチスレッドのライブラリを使っているとか、
ポインタが想定外のアドレスを指しているとか

>>325-326
2chのバグだろう

書き込み確認画面が出る際、" を使うと、そこで文字列の終了とみなされる。
" の代わりに、\" とエスケープすれば、どうだろう?

それか、書き込み確認画面が出たら、1度キャンセルすれば、確認画面は出ないようになった

>>326
1行ずつループする必要はない

File.read('number.txt').scan(/^13\d$/) do |matched|
p matched # ここに処理を書く
end

338デフォルトの名無しさん2016/12/06(火) 23:36:56.03ID:irhz0xDF
https://paiza.jp/moshijo/challenge/moshijo_character_4
勉強がてら始めたけど、いきなり躓いた……

a,b,c = gets.split.map(&:to_i)

d = a + b
e = a - b

if /"+"/ =~ c
puts d
else
puts e
end

if文でcの入力値が+で一致してたらそれに合わせて出力、っていう形でいけると思ったらエラーが出て無理だった……

339デフォルトの名無しさん2016/12/06(火) 23:57:34.34ID:Ke9ZeJQj
>>338
問題が分からんけど、正規表現での + は特殊文字だから + という文字に一致させるにはエスケープが必要
というか、if c == '+' でいいんじゃないの?

340デフォルトの名無しさん2016/12/06(火) 23:59:40.47ID:Ke9ZeJQj
>>338
あと、a,b,c = gets.split.map(&:to_i) とすると、全部 to_i しようとするから '+' も to_i しておかしなことになるよ

341デフォルトの名無しさん2016/12/07(水) 01:37:01.20ID:dh118EuJ
画像で申し訳ないけど問題はこんなん
http://i.imgur.com/N2iY7aJ.jpg
ようは半角スペース区切りで、数字2つと+か−を入力
+なら前者の数字を足し算、−なら引き算をして出力しろっていう問題

修正したけど何故か−側の答えしか出なくてワロタ……
なんで+判定してくれんのだ
a,b,c = gets.split(' ').map(&:to_i)
d = a + b
e = a - b

if c == /\+/ then
puts d
else
puts e
end

342デフォルトの名無しさん2016/12/07(水) 04:45:38.63ID:qM0eFzSC
>>341
https://docs.ruby-lang.org/ja/latest/method/String/i/to_i.html
整数とみなせない文字があればそこまでを変換対象とします。 変換対象が空文字列であれば 0 を返します。
p "0x11".to_i # => 0
p "".to_i # => 0
つまり
> "+".to_i
=> 0
> "-".to_i
=> 0
> a,b,c="1 2 +".split(' ').map(&:to_i)
=> [1, 2, 0]
> a,b,c="1 2 -".split(' ').map(&:to_i)
=> [1, 2, 0]
> puts /\+/
(?-mix:\+)
> puts Regexp.new(/\+/)
(?-mix:\+)
> 0 == /\+/
=> false
> 0 == Regexp.new(/\+/)
=> false
こういうこと

343デフォルトの名無しさん2016/12/07(水) 07:11:33.83ID:4ygr9k/C
>>341
>>340 を読め

344デフォルトの名無しさん2016/12/07(水) 07:37:56.24ID:9RayTpny
>>339>>340>>340
ありがとうございます、やっと出来ました!
a,b,c= gets.split

d = a.to_i+b.to_i
e = a.to_i-b.to_i

if c == '+' then
puts d
elsif
puts e
end

入力を文字列で受け取ってから、それを数値として扱うようにしてから計算
最後に出力っていう形にしたら成功しました!

改めてgets.split.map(&:to_i)や.to_iの意味を理解できて良い勉強になりました

345デフォルトの名無しさん2016/12/07(水) 16:18:08.81ID:xs1sI7sQ
オライリのディープラーニング本進めてるがバッチ処理のあたりから
ようわからん。
数学は好きなんだけどプログラミング特有のテクニックになると
どうも飲み込みづらい。

346デフォルトの名無しさん2016/12/07(水) 16:35:10.61ID:aZJac4xC
オライリーのDL本はPythonじゃねーの?

347デフォルトの名無しさん2016/12/07(水) 22:34:39.98ID:vMVuhNA3
Rubyでディープラーニングなんか遅過ぎて勉強以前の問題だと思うけど
numpyと比べたら軽く数桁違うだろ

348デフォルトの名無しさん2016/12/07(水) 23:37:57.91ID:4ygr9k/C
>>347
勉強のために入るなら使い慣れた言語ってのは普通にある選択肢だと思うけどなー
知らない分野と知らない言語のダブルに対処するより効率が高いだろうし

349デフォルトの名無しさん2016/12/08(木) 03:46:35.74ID:WR2cMfp2
本の言語に合わせた方が分かりやすくね?
その言語知らないと翻訳できないんじゃね?

350デフォルトの名無しさん2016/12/08(木) 07:25:28.39ID:/aGxLpEu
言語に気を取られるのは無駄ってどっちかというとPython的な理屈だしなあ
Rubyと違ってシンプルだからそんなに難しく考える必要はない

351デフォルトの名無しさん2016/12/08(木) 09:33:01.89ID:u0pmvICB
直也:.NET CoreというかC#って型があって、しかもサーバーサイドも書けるじゃないですか。Linuxでやってた人たちはずっとスクリプト言語使ってて、
Rubyとか型がない言語でサーバーサイド書いてることに疲れてきちゃってるんですよね。
ある程度の規模のものではサーバーサイドも型がある言語で書きたいと思って、
ScalaとかJava 8をやってみたんだけど、どの言語もちょっとバランスが悪いんですよね。
Scalaはプログラマ寄りすぎるし、Javaはコンサバすぎる。サーバーサイドSwiftもとがりすぎてるし。
実績があって型がある言語ってC#なんですよね。そのC#がLinuxで使えるのは大きいんですよね。
だから、ワンチャンあるなって。あとは市場が評価するかどうかなんですよね。
バランスはいいと思います。それがWindowsだけでなくMacでも使えるようになったのは本当に大きいですし。

352デフォルトの名無しさん2016/12/08(木) 09:49:01.09ID:V2tLN3UQ
Racketみたいにpythonのnumpyとかそのまま流用できる方法はrubyにはないのですか?

353デフォルトの名無しさん2016/12/08(木) 21:28:42.10ID:6kXtynY2
初めて1日目の初心者なんですけど直し方がわかりません

Ocraでexe化して起動するとBad signature in executable.ってエラーが出ます
windows10でRubyのバージョンは最新版です

ちなみにexe化したファイルのソースは
# encoding: Shift_JIS
print

3543532016/12/08(木) 21:43:20.44ID:6kXtynY2
途中送信すみません

# encoding: Shift_JIS
print てすと

です。

355デフォルトの名無しさん2016/12/08(木) 22:30:09.38ID:HERlhtNF
どこでそのエラーが発生したのか分からんけど
ファイル名:353.rb
中身は以下だけ

printf ("てすと")

この状態でターミナルから>ocra 353.rb
これで特にエラーも無くexeして、実行するとウィンドウが起動してテストって表示されて終了する
win7でRubyのバージョンも2.2.4だから状況違うけど

俺も初心者だから良く分からんぞい

3563532016/12/08(木) 22:37:38.67ID:6kXtynY2
DevKit入れたら自決しました

357デフォルトの名無しさん2016/12/09(金) 00:54:47.09ID:GS4b0ME0
死ぬんじゃない

358デフォルトの名無しさん2016/12/09(金) 04:36:22.37ID:VazcIIHJ
macでrb拡張子(スクリプト)をターミナルで実行するにはどうすればいいですか?
homebrewやRuby on Rails を入れる必要がありますか?

359デフォルトの名無しさん2016/12/09(金) 07:09:25.41ID:IAKedM2U
バージョンを問わないなら最初から入ってるだろ
ruby myrubyscript.rb

360デフォルトの名無しさん2016/12/09(金) 07:15:38.30ID:JZme2NZr
irb(main):001:0> a,b,c = [1,2],3
=> [[1, 2], 3]
irb(main):002:0> a
=> [1, 2]
irb(main):003:0> b
=> 3
irb(main):004:0> c
=> nil
irb(main):005:0> a,b,c = [[1,2],3]
=> [[1, 2], 3]
irb(main):006:0> a
=> [1, 2]
irb(main):007:0> b
=> 3
irb(main):008:0> c
=> nil

これって、どのように理解したらいいですかね?

361デフォルトの名無しさん2016/12/09(金) 07:35:31.81ID:ESs2BvJq
>>360
[[1, 2], 3] は [1, 2] と 3 の2つの要素からなる配列
だから a, b, c = [[1, 2], 3] とすると a には1要素目の [1, 2] が入り、
b には2要素目の 3 が入り、c は3要素目がないので nil が入る

362デフォルトの名無しさん2016/12/09(金) 07:39:07.21ID:ESs2BvJq
>>360
[1, 2], 3 と [[1, 2], 3] の違いは以下を参照

https://docs.ruby-lang.org/ja/2.3.0/doc/spec=2foperator.html
> 右辺の式が一つし か与えられなかった場合、式を評価した値は配列に変換されて、各 要素が左辺のそれぞれの式に代入されます。

363デフォルトの名無しさん2016/12/09(金) 08:04:59.41ID:CktcRLbu
だから理屈としては「配列リテラルの多重代入は行わない方がよい」になる
こんなことでエラーにしたくないので色々なパターンを頑張って実装したんだが
その結果誰にも読み解けないものができてしまった

364デフォルトの名無しさん2016/12/09(金) 10:24:20.17ID:p9V2Jelw
マニュアルにある通りだとおもうけど?
foo, bar = [1, 2] # foo = 1; bar = 2
foo, bar = 1, 2 # foo = 1; bar = 2
(foo, bar), baz = [1, 2], 3 # foo = 1; bar = 2; baz = 3

365デフォルトの名無しさん2016/12/09(金) 10:49:11.49ID:FAhbp1DA
class Lottery
result=["大吉", "中吉", "小吉", "凶", "大凶"]

def roll
num=rand(5)
return num
end

print result[roll],"です。\n"

end

Lottery.new.roll

上記コードでundefined local variable or method `roll' for Lottery:Class (NameError)が発生します。
原因がどこにあるか教えてください。

366デフォルトの名無しさん2016/12/09(金) 11:23:52.82ID:6FftK3xp
>>365
class...endの中においてdefでふつーに定義するメソッドは「そのクラスのインスタンスメソッド」となる
これは「そのクラスのインスタンス(=オブジェクト)」に属しているため、インスタンスを生成していないclass定義の中から呼び出すことはできない

……というような説明で理解できるならそもそもそんなことしねーよというのはまあその通りではある
とりあえずは
「クラス定義の中ではそこで定義したインスタンスメソッドを使うことはできない」
「クラス定義の中では"地の文"を書いてはいけない」
というふうに思っておくといいよ

class Lottery
# クラス定義の中で大文字で始まると"クラス定数"。くわしくはぐぐれ
RESULT=["大吉", "中吉", "小吉", "凶", "大凶"]

def dice
num=rand(5)
return num
end

# データ生成と表示はメソッドを分ける
# あと画面表示にputsメソッドを紹介してない参考書は焚書で
def roll
puts RESULT[dice]+"です"
end
end

Lottery.new.roll

367デフォルトの名無しさん2016/12/09(金) 11:46:46.57ID:FAhbp1DA
>>366
解説ありがとうございます。
>「そのクラスのインスタンス(=オブジェクト)」に属しているため、インスタンスを生成していないclass定義の中から呼び出すことはできない
ここをそもそも知らなかったためにどはまりだったので、助かりました。

># クラス定義の中で大文字で始まると"クラス定数"
定数じゃないとエラーが出るんですね。勉強不足でした。

># データ生成と表示はメソッドを分ける
そこそこ勉強しているつもりですが、まだまだ初心者を抜け出せない状態です。実際のところ相当煮詰まっている状態でして、こういった実装時の作法?
みたいなものを知りません。おすすめの書籍などありませんでしょうか。

># あと画面表示にputsメソッドを紹介してない参考書は焚書で
焚書ですか…

368デフォルトの名無しさん2016/12/09(金) 12:47:27.53ID:Kfw6K1eC
Rubyの基礎を学んでる最中にRubyのお作法も別途学ぼうとすると息苦しくてつまんないと思う
とりあえずはその手元にある今使ってるやつで学んでみたらどうだろうどうかしら

矯正はあとからでもできるし無駄や遠回りはある程度経験しておくとその後なんとしても無駄や不作法を避ける糧になるよw

369デフォルトの名無しさん2016/12/09(金) 13:55:22.62ID:FAhbp1DA
>>367
了解しました。まだ基礎力が定着していないのに分不相応でしたね。ですが、最近なんかDRYが多くて
作成したコードが不細工だなあと感じるようになり、うまくすっきりしたコードは書けないかなと思ったものですから。
まあ、とにかく基礎的・基本的なことに集中しようと思います。

370デフォルトの名無しさん2016/12/09(金) 20:21:49.49ID:EaN/YLKK
基本の文法書は、
たのしいRuby 第5版、2016

その次のレベルは、プロ必須本の、
Effective Ruby、2015
バグが起きにくい、安全で効率的なコーディングと、
間違いやすいポイントを解説

371デフォルトの名無しさん2016/12/09(金) 22:49:00.14ID:pEg3v2QU
たのしいRubyは何とか読みきれたけど
次に買ったRuby on Rails4 アプリケーションプログラミングは内容が濃すぎて挫折してたから
Effective Rubyを買ってみようかな……

372デフォルトの名無しさん2016/12/09(金) 23:02:53.80ID:EaN/YLKK
改訂3版 基礎 Ruby on Rails、黒田努・佐藤和人、2015

これの方が、わかりやすい

373デフォルトの名無しさん2016/12/09(金) 23:06:00.61ID:IAKedM2U
>>371
伸び悩んだら他の言語に浮気するのがおすすめ
気分転換とかじゃなくて本質が見えるようになる
戻ってきたら驚くほど分かるようになってる

374デフォルトの名無しさん2016/12/09(金) 23:28:07.12ID:EaN/YLKK
それなら、12/22 発売の「みんなのPython 第4版」

この本は「たのしいRuby」と表裏一体だから、スラスラ読める

3753602016/12/10(土) 00:08:14.85ID:SQghVBCH
遅レスだがありがとう。

376デフォルトの名無しさん2016/12/10(土) 00:16:10.17ID:7eWDkV7Q
本を読んで勉強したのは最初の言語だけだなー(C++だったな)
あとはネットで情報を漁ってとりあえず書いてみてってのを繰り返して覚えてるな

いくらガベージコレクタがどうの型がどうのと言われても、やはりC++のような
メモリ管理や型についての基礎知識は持っておいた方がいいと思うのは老害の戯言かなー

377デフォルトの名無しさん2016/12/10(土) 06:45:40.85ID:F6sTBWuO
それはまちがいなく老害

378デフォルトの名無しさん2016/12/10(土) 11:45:02.49ID:qQjpy7Dv
rubyにも型はある
型は意識しておいた方が良い

379デフォルトの名無しさん2016/12/10(土) 17:29:55.11ID:ffTfSgqi
今時メモリ管理とか勉強が必要になるぐらいまでのめり込んでいる人は
自分で読む本がわかっている頃だろうな。

380デフォルトの名無しさん2016/12/10(土) 17:42:31.42ID:qQjpy7Dv
rubyでメモリ管理いちいち気にする香具師はアホ

381デフォルトの名無しさん2016/12/10(土) 17:45:12.03ID:eWdy/g06
老害っていうより、プログラマとしてのセンスが悪いと思う

382デフォルトの名無しさん2016/12/10(土) 17:57:25.90ID:dShDNVDG
その言語でのプログラム作成者の80%が一生使わず残りの90%も初年度には触れないようなものの知識を初学者の100%に求めるのは害悪

383デフォルトの名無しさん2016/12/10(土) 17:57:30.76ID:02ejXKtR
いまでもRailsで普通にやるとメモリバカ食いするケースの対処が必要だったり
GCの実行頻度を考慮して設計する必要があったりはするよ
安易に不必要だと決めつけるのは考えが足りない子だね

384デフォルトの名無しさん2016/12/10(土) 18:05:28.08ID:ck8bDMeh
もちろん型やメモリ管理など内部の仕組みは
理解できている方が良いが初期の学習では不要

385デフォルトの名無しさん2016/12/10(土) 19:21:30.99ID:we+CUvc2
人によっては内部の動作を知りたいって子もいるから
そういう子には教えてもいいと思うけど
相手を見ないで全員に教えても意味はないやりたい事はみな違うから

386デフォルトの名無しさん2016/12/11(日) 23:33:44.06ID:BA+Tsrf4
つまんね

387デフォルトの名無しさん2016/12/11(日) 23:36:27.60ID:sXnmAsK+
gem installで何かを入れようとしても
ERROR: While executing gem ... (URI::InvalidURIError)
bad URI(is not URI?):

gem update --systemしようとしても
ERROR: While executing gem ... (URI::InvalidURIError)
bad URI(is not URI?):

となって出来ないんですけど
原因わかりますか?
rubyは2.3.3
gemは2.5.2
OSはwin10です

388デフォルトの名無しさん2016/12/11(日) 23:52:42.43ID:9ThvSwmQ

389デフォルトの名無しさん2016/12/11(日) 23:57:26.28ID:sXnmAsK+
>>388
串なんて通してないから違うと思います

390デフォルトの名無しさん2016/12/12(月) 03:14:04.62ID:QY0nCTMm
>>387
AddTrustExternalCARoot-2048.pem を最新の物にする。
DL場所や方法は検索すればすぐ見つかる。

391デフォルトの名無しさん2016/12/12(月) 14:54:05.30ID:Eai/X/NY
>>390
rubygems-update-2.6.8.gemを入れてみたけど改善しませんでした

392デフォルトの名無しさん2016/12/12(月) 15:20:46.65ID:Eai/X/NY
Ruby 2.2.6に変えたら何故か解決しました

393デフォルトの名無しさん2016/12/13(火) 15:12:14.55ID:OjWn7cVV
テストが通らない・・・
どこが間違っているかわかる方いたらお願いします。

ランクC Paiza芦屋川雛乃からのヘルプ依頼
https://paiza.jp/moshijo/

a = gets.chomp.split(" ")
s = gets.chomp
t = gets.chomp
r =""

if s == "decode"
for i in 0...t.size
for u in 0...a.size
if t[i] == a[u]
r[i] = u.to_s
end
end
end
puts r.to_i
elsif s == "encode"
for i in 0...t.size
c = t[i].to_i
t[i] = a[c]
end
puts t.to_i
end

394デフォルトの名無しさん2016/12/13(火) 15:42:27.45ID:wETuuVVa
r = "" がおかしいんじゃないかな

395デフォルトの名無しさん2016/12/13(火) 18:01:40.46ID:nznhQA15
Rubyで解きましたっていってこのスクリプトが返ってきたらへにょーんってなるな

396デフォルトの名無しさん2016/12/13(火) 20:42:28.70ID:mtOpDsT/
r[i] = u.to_s
rが配列なら、[ ]が付いていない、以下はおかしい

r =""
puts r.to_i


c = t[i].to_i
t[i] = a[c]

tが配列なら、[ ]が付いていない、以下はおかしい
puts t.to_i

型が複数を扱うコンテナなのか、単体なのか、意識しろ

397デフォルトの名無しさん2016/12/14(水) 07:41:49.95ID:bcNQ7Ev0
意識高い系

398デフォルトの名無しさん2016/12/14(水) 08:02:24.73ID:Q/TaGcT0
>>395
対象のRubyでeachが実装されているとは限らない

399デフォルトの名無しさん2016/12/14(水) 08:18:08.95ID:fDAOl6vn
w

400デフォルトの名無しさん2016/12/14(水) 08:27:07.65ID:2yTcGsTl
今のRubyの想定バージョンっていくつなんだろうね
まだ1.8.6?

401デフォルトの名無しさん2016/12/14(水) 15:12:01.78ID:a66Br6Ed
>>400
>>393 のテスト環境は ruby 2.3.0 と書いてありますね。
https://paiza.jp/guide/language
だから >>398 は杞憂

402デフォルトの名無しさん2016/12/14(水) 15:16:14.96ID:4jpqupHX
>>398が皮肉だとわからないのは辛い

403デフォルトの名無しさん2016/12/14(水) 17:49:04.08ID:obMYgrm6
ruby初心者です
クラスにアクセサ実装しました
正の整数しか受け付けさせません
それ以外は例外で弾こうと思います
どの例外がいいですか?

404デフォルトの名無しさん2016/12/14(水) 18:01:58.62ID:bWT0nkJt
>>403
何でもいい
その手の例外は出たらバグなのでキャッチされることは無いはず
誤ってキャッチされてしまう可能性があるような紛らわしいものでなければOK

405デフォルトの名無しさん2016/12/14(水) 18:19:07.06ID:po7ivxZl
オブジェクトとしては間違ってないんだけど処理都合で弾きたい引数が来た場合はArgumentError
オブジェクトや持ってるメソッドからして間違ってる感じのが来た場合はTypeError
ということで第三者公開するライブラリならArgumentErrorだとわかりよい
が、おおむね>>404なのでRuntimeErrorでもいいよ

406デフォルトの名無しさん2016/12/14(水) 21:11:00.93ID:US7iqqFk
特別なアレならStandardError継承して独自の例外投げとけば良いのでは

407デフォルトの名無しさん2016/12/15(木) 01:34:42.58ID:CIBVBBHR
クラスメソッド内でnewメソッドを呼び出してインスタンスを生成するようなケースってどういう場合に使うんだ?
ARとかのbuildだとかfindだとかはこの類だとわかるんだけど他のライブラリとか読んでるとクラスメソッド内でインスタンス生成してそのインスタンスに対してインスタンスメソッドを呼び出して…みたいになってて意図が分からん

408デフォルトの名無しさん2016/12/15(木) 07:08:08.19ID:V7DRptyX
>>407
オブジェクト指向プログラミングの一般的な慣習として次のようなものがある
・利用者がインスタンスを手に入れた時点で初期化などの準備は終わっていて使える状態になっている方がよい
・コンストラクタはなるべく単純な処理のみを行い、基本的に失敗しない方がよい
で、クラスメソッドを使う方法ならこの両方を満たせるというわけ

409デフォルトの名無しさん2016/12/15(木) 07:22:36.49ID:YHGHBn1b
不完全なインスタンスが出来ないように initialize 内で積極的に例外活用するスタイルもある。

>>407
インスタンスを作るのはインスタンスに状態をもたせたい時。処理が複数のメソッドから成っていて状態を共有したいケース。
クラス自体にメモ書きするのはスレッドセーフにならんとか色々あってオススメしない。

410デフォルトの名無しさん2016/12/15(木) 07:32:30.44ID:V7DRptyX
>>409
>不完全なインスタンスが出来ないように initialize 内で積極的に例外活用するスタイルもある。
クラス名からコンストラクタで何やってるかがわかりきってるようなものならそれでもいいけどね
コンストラクタで複雑な処理をしない方がよいというのは、
・名前がクラス名だけでメソッド名が無いので一見して何やってるのか分かりにくい
・一つしか持てないので拡張性に乏しい
という意味もある

411デフォルトの名無しさん2016/12/15(木) 08:28:32.84ID:qDnwyx0x
>>407
「クラスメソッドがそのクラスのインスタンスメソッドを活用したユーティリティメソッドになってるだけ」という手抜き理由もあるよ
本来はHogeUtilsモジュールとかに切り出すべきだけどHogeクラスのクラスメソッドに入れちゃってる
あらゆる事象に深遠なる理由を求めて小難しく考える必要はないw

412デフォルトの名無しさん2016/12/15(木) 08:41:19.54ID:TuKRCX6V
環境win7
ruby 2.2.5

C:\Users\〜〜>gem update --system
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)

gemのアップデートしようとしたらこんなエラーが出て出来なくなった
http://qiita.com/fkshom/items/4206ebafbd80aa985498

http://book.scss.jp/code/c2/07.html
を参考に証明書をコピーしたりgemのダウンロード先を変えてみたりしたけどダメだった……

413デフォルトの名無しさん2016/12/15(木) 08:41:29.02ID:CIBVBBHR
色々回答ありがとう
気になったところを書いてみる
>>408
うーんそれだけの慣習ならインスタンスメソッドでよくね?と感じた。

>>409
クラス変数的に状態共有させると色々整合性取れなくなるので状態共有が目的でクラスメソッドを使うのも違和感ある。


>>411
それはわりと見かける気がするね

4144122016/12/15(木) 08:59:47.45ID:TuKRCX6V
ごめん、出来たわ
2.2.6の証明書を既存のrubyにコピーしたら出来たわ
本当に申し訳ない

415デフォルトの名無しさん2016/12/15(木) 09:07:36.45ID:ArFpv1Xp
>>413
まあRubyなら初期化用のインスタンスメソッドを設けるほうが一般的かもね
今時は、とにかく状態を持つことを嫌って、初期化済みかどうかといった余計な状態を増やすのではなくインスタンスの生成と一致させてしまえ
という考え方がどっちかというと主流なんだけど、Rubyはその点わりと昔ながらの「オブジェクトは生き物」な感じなので

416デフォルトの名無しさん2016/12/15(木) 11:58:47.88ID:jYtTego3
ルビーやサファイアの雲が存在?地球から1000光年先の惑星、英大学が調査
da i ly.2ch.net/test/read.cgi/ne wspl us/1481704596/

417デフォルトの名無しさん2016/12/16(金) 10:30:45.38ID:peb6q01b
$ ruby --version
ruby 2.1.10p492

puts line if line =~ /<a target="_blank" rel="nofollow" href="http:\/\/www.xxxxxx.co.jp\/.*\/>\r:.*/m
puts line if line =~ /^:.*/

最終的に行いたいのは上の二行から改行を消してstringに入れたいのですが、改行でヒットしないので

テストとして一行目の記述を書きました。ヒットしなくて困っています。
utf8、LFなファイルで、末尾の改行\rでも\Rでもマッチしません。
"http:\/\/www.xxxxxx.co.jp\/.*\/>/mやmなしではパターンマッチします。
どうすれば一行目は改行を含めてマッチするでしょうか?

418デフォルトの名無しさん2016/12/16(金) 10:58:45.79ID:wL7umkxz
言ってる意味がよくわからないけどLFなら¥nじゃないの

419デフォルトの名無しさん2016/12/16(金) 11:16:34.44ID:SEQOd6ed
いらない行
ほしい1行目
ほしい2行目
いらない行

から「ほしい1行目\nほしい2行目」を正規表現で取り出すにはどうすればいいですか?
回答:
正規表現の中に改行を書けばよい。//mは「.が改行にもマッチするようになる」機能であり、今回とは無関係
正規表現「^」は実際には「改行の直後の位置そのもの」にマッチし正規表現「$」は実際には「改行の直前の位置そのもの」にマッチする
※改行のない文字列に対してはちょっと違うが割愛
つまり「改行直後+ほしい1行目+改行+ほしい2行目+改行直前」という正規表現を使えばよい
String#scanメソッドはマッチした文字列をすべて含んだ配列を返す
irb>

420デフォルトの名無しさん2016/12/16(金) 11:19:23.88ID:PSmXndV/

421デフォルトの名無しさん2016/12/16(金) 11:19:26.36ID:SEQOd6ed
ああWebブラウザからだった忘れてた
2chよく沈まないもんだ
irb> &quot;111\nABC\nDEF\n333\n444\n\555\n&quot;.scan(/^A.+?\n.+?F$/)
=> [&quot;ABC\nDEF&quot;]

422デフォルトの名無しさん2016/12/16(金) 11:20:47.17ID:SEQOd6ed
ぬううん
まあいいや諦めた
正規表現だけもってってくれ

423デフォルトの名無しさん2016/12/16(金) 18:35:18.13ID:WbXTRG+B
。oO(lineの中身が1行しかないとかそんなオチだろうな)

424デフォルトの名無しさん2016/12/16(金) 18:37:20.55ID:WbXTRG+B
。oO(単数形なのが怪しい)

425デフォルトの名無しさん2016/12/16(金) 23:16:55.88ID:gVrNrOSW
>>407-411
new を使うのは、疎結合の場合。
スコープを外れて、オブジェクトが消えても、他のオブジェクトに影響がない場合

initialize など、特別な初期化処理をするものは、
グラフィック・DBなどの外部リソースを共有するなど、
スコープを外れた後も、外部リソースが存在する場合

426デフォルトの名無しさん2016/12/17(土) 02:15:18.91ID:qzqGmxSM
>>425
うーんなるほど
サンプルコード的なのないかな
class A
class << self
def call(*args)
new(args).call
end
end
def call
#なんかやる
end
end
でA.call(args)とするのと
class A
def call
#なんかやる
end
end
でA.new(args).callとするのだと用途的にどう違うのか
初期化とかは省いたが適当に補完してくれる

427デフォルトの名無しさん2016/12/17(土) 02:18:10.02ID:qzqGmxSM
✕してくれる
○してくれ

428デフォルトの名無しさん2016/12/17(土) 08:49:28.17ID:2dyThgQw
>>425
悪いけどあまり良くない設計だと思うよ
どのオブジェクトとも寿命が一致しないリソースってのは基本的に作らない方がいい

429デフォルトの名無しさん2016/12/17(土) 20:22:48.43ID:8Cd/8VwS
>>426
new と call がセットならそれをするメソッドを用意する。
それだけのこと。

430デフォルトの名無しさん2016/12/18(日) 00:30:46.29ID:05Ug+E6t
>>426
> でA.new(args).callとするのだと用途的にどう違うのか

可読性が違う。

まずあんたは、サンプルを提示しているが、
あんたのその結論は、そのサンプルでのみ通用すること
サンプルにしてしまったために可読性を論ずる機会が失われている。


可読性と言うのは何かというと、どれだけ読むべきコードを減らして
内部の実装を見ずに、すんなり読めるかということ。
それを実現するために必要なものの一つが適切な名前

サンプルにするとその適切な名前が失われるから
そのサンプルを見るだけでは可読性の良し悪しがわからなくなる。

431デフォルトの名無しさん2016/12/18(日) 01:11:06.36ID:GM9JkVQ+
>>429
初期化したオブジェクトに対して外から呼び出せる命令が1つしかないかどうかで使い分けるという風に読めたんだけど合ってるか?

>>430
結論なんかどこにも書いてないんだが…
あとそれ可読性じゃなくね?カプセル化とかの方が言わんとしてることに近い気がする
あとその主張じゃ分かってない人にはピンとこない(少なくとも俺は納得できなかった)ので適切な例を掲示してくれよ

432デフォルトの名無しさん2016/12/18(日) 01:45:50.33ID:aCKcGLhu
>>428
DBの接続・切断などで、特別な処理が必要。
WindowsアプリのGDIでも、ペン・ブラシなども共有リソース

何々マネージャーのような、唯一のオブジェクトである、シングルトンでは、
newせず、特別な初期化処理をする

433デフォルトの名無しさん2016/12/18(日) 08:45:13.64ID:kBEsP2W2
>>432
その理屈だとRuby標準のFileなどネイティブなリソースを持つあらゆるクラスが初期化用インスタンスメソッドを持つことになるぞ
特別な処理が必要であるからといって生成と初期化のタイミングを別にしなければならない理由にはならない
シングルトンも意味不明だな
シングルトンなら普通はクラスがインスタンスにアクセスされたタイミングで初期化でしょ

434デフォルトの名無しさん2016/12/18(日) 15:20:39.20ID:opw80zoz
>>431
>>429
>初期化したオブジェクトに対して外から呼び出せる命令が1つしかないかどうかで使い分けるという風に読めたんだけど合ってるか?

そんな堅苦しく考えないでいいと思う。このケースに限らず頻出パターンがあればそれをメソッドにするでしょ。

A.new(...).call を A.call(...) と書けることに価値を見出せないなら別に前者のままでもいいし。

435デフォルトの名無しさん2016/12/18(日) 15:50:39.51ID:i2W42kEF
>>434
なるほど
前者はAクラスのオブジェクトに対する命令、後者はClassクラスのAというオブジェクトに対する命令なはずなのでなんか意味的にも違ってくるのかなと思ってた

436デフォルトの名無しさん2016/12/18(日) 16:07:50.85ID:ZqV+jY/A
違うよ

437デフォルトの名無しさん2016/12/18(日) 16:25:02.97ID:i2W42kEF
>>436
ごめん
理解が足りてないかも
どう違うか聞いても良いか?

438デフォルトの名無しさん2016/12/18(日) 16:29:16.25ID:i2W42kEF
補足すると個人的にはやっぱりクラスメソッド内でインスタンスを生成して何かしらの操作をするならば最終的に返り値としてそのクラスのオブジェクトが返るとかじゃなきゃ使うメリットを感じられないと感じてる

439デフォルトの名無しさん2016/12/18(日) 16:40:09.66ID:ZqV+jY/A
rubyのひとは返り血ないのを嫌うね

440デフォルトの名無しさん2016/12/18(日) 16:45:34.17ID:opw80zoz
物騒だなw

441デフォルトの名無しさん2016/12/18(日) 17:05:27.38ID:/mOXmKGC
>>439
Rubyは本来逆だと思う
原理主義的なOOPは返り値をあまり使わないよ
最近のOOPで返り値を積極的に使うようになったのは最近の関数型かぶれなスタイルの流行によるもの

442デフォルトの名無しさん2016/12/18(日) 18:47:07.03ID:05Ug+E6t
> 原理主義的なOOPは返り値をあまり使わないよ
根拠は?

何の根拠もなく言い切るとか
ホント迷惑だよな。

ま、2ちゃんねるだから、誰も信用しないだろうけどw

443デフォルトの名無しさん2016/12/18(日) 19:12:28.03ID:cjBRT8Q8
オブジェクト指向そのものにはメソッド戻り値の概念はないよ
メソッド操作の結果はメソッドが刺さってるオブジェクトの変化だ

ただしこれだとプリミティブ過ぎて人間には扱い辛いのでどの言語も当初から戻り値ありで設計されてる

444デフォルトの名無しさん2016/12/18(日) 19:15:09.75ID:/mOXmKGC
>>442
Tell, Don't Askって聞いたことない?
オブジェクトから値を取るのは副作用に弱いコードになるから避けろという、オブジェクト指向開発の有名な指針だ
Rubyでは戻り値を使う代わりにブロックを渡して引数で結果を受け取るということが非常によく行われるけど、あれはこの原則に従ってるんだよ

445デフォルトの名無しさん2016/12/18(日) 19:35:47.63ID:05Ug+E6t
>>444
Tellした結果は戻り値だろうがw

お前が言ってるのはクラスの状態を取得して、
その状態をもとに、貰った側で処理を書くんじゃなくて、
クラス側に処理させろという話。

戻り値とは全く関係ない。

446デフォルトの名無しさん2016/12/18(日) 19:40:12.99ID:05Ug+E6t
ブロックを使うのを引数で結果を受け取るためだとか考えてるのもアホだしw

ブロック使うのは、ユーザーが書く処理の前後にある、
共通の処理をクラス側(ライブラリ側)に持たせて、
処理の中身を入れ替え可能にするためだろ。

447デフォルトの名無しさん2016/12/18(日) 19:54:05.97ID:/mOXmKGC
>>446
疑問を持つのは結構だけど、新しい言葉を聞いたら調べてみようと思わないの?
君がそれに同意するかはともかく(俺はケースバイケースだと思う)、常識だからせめて正しく理解はしておいた方がいいよ
そんな態度じゃ成長しない

448デフォルトの名無しさん2016/12/18(日) 19:59:00.44ID:05Ug+E6t
>>447
そんなことをより、お前の反論が聞きたいんだが?w
なんでそこで言い訳を始めるかね。

449デフォルトの名無しさん2016/12/18(日) 20:02:15.41ID:/mOXmKGC
>>448
反論もクソも、別に俺の持論じゃなくて歴史的事実なんだが
Tell, 〜はSmalltalkで生まれたプラクティスで、ベターな方法としてコールバックを使う
それを真似たのがRubyのアレ

450デフォルトの名無しさん2016/12/18(日) 20:11:38.41ID:05Ug+E6t
>>449
はい。教科書読んだだけの人へw

http://martinfowler.com/bliki/TellDontAsk.html

日本語
https://web-beta.archive.org/web/20150316001509/http://blog.showqase.com/2014/01/19/translation-tell-dont-ask.html
ただ個人的には私は「尋ねるな、命じろ」は使わない。もちろんデータと振るまいを同じ箇所に置こうとはするので、
ほとんどよく似た結果になる。 一つ「尋ねるな、命じろ」で問題だと思うのは、この原則のせいで
「GetterEradicators」になって、すべての問い合わせメソッドを取り除こうとする人を見たことがあることだ。



俺の言っている通り、戻り値をつかわないみたいな適当な話じゃなくて、
クラス側に処理させろという話だってわかっただろ?

451デフォルトの名無しさん2016/12/18(日) 20:12:24.26ID:05Ug+E6t
もちろん「コールバックを使う」なんてことは一言も書かれていない。
Tell, Don't Askとは全く無関係の概念だから。

452デフォルトの名無しさん2016/12/18(日) 20:14:17.76ID:05Ug+E6t
あと引用した部分は ID:/mOXmKGC をからかうのに面白かったから
引用しただけで、他の人はちゃんとリンク先を読んでね。
そっちがメインだから。

453デフォルトの名無しさん2016/12/18(日) 20:27:07.17ID:05Ug+E6t
反論無くなったな いま勉強中かな?w
まとめで追い打ちをかけようw

441 名前:デフォルトの名無しさん[sage] 投稿日:2016/12/18(日) 17:05:27.38 ID:/mOXmKGC [1/4]
> 原理主義的なOOPは返り値をあまり使わないよ

↑間違い

444 返信:デフォルトの名無しさん[sage] 投稿日:2016/12/18(日) 19:15:09.75 ID:/mOXmKGC [2/4]
> オブジェクトから値を取るのは副作用に弱いコードになるから避けろという、オブジェクト指向開発の有名な指針だ

↑これは正しいが「戻り値」から「オブジェクトから値を取る」に話がすり替わってる。
おそらくどこからか引用してきたのだろう。

同444
> Rubyでは戻り値を使う代わりにブロックを渡して引数で結果を受け取るということが非常によく行われるけど、あれはこの原則に従ってるんだよ

↑間違い。Tell, Don't Askとコールバックに関係なく、単にオブジェクトから値を取らずにオブジェクトに処理させるってだけの話。
そこにコールバックは出てこない。用語だけ知って内容を理解してないから、間違った結論に至っている。

454デフォルトの名無しさん2016/12/18(日) 20:37:26.65ID:vN9Eyv4k
ここは君の遊び場じゃない

455デフォルトの名無しさん2016/12/18(日) 20:38:11.46ID:05Ug+E6t
みんなの遊び場だろ?

456デフォルトの名無しさん2016/12/18(日) 20:43:12.96ID:hjqTwWMB
ドン引きしてるだけだよw
何を必死になってるのか知らないけど、戻り値に対する直接的な書き換えとしてコールバックを挙げただけで
クラス側で処理することを否定してるつもりはないぞ?
確かにコールバックを使っても振る舞いをクラスに持たせたことにはならないが、
制御をクラス側に渡すだけでも余計な状態を持つことを避けてプログラムをシンプルにする効果があるよ
https://pragprog.com/articles/tell-dont-ask

457デフォルトの名無しさん2016/12/18(日) 20:47:21.79ID:05Ug+E6t
>>456
話を混ぜっ返すな。
俺はそんな話は全くしてない。

何が間違いかは>>453のまとめに書いただろ
それ以外の話はしてない。

458デフォルトの名無しさん2016/12/18(日) 20:51:55.28ID:hjqTwWMB
>>457
悪いけど、君が何を根拠に間違いと言っているのか俺には読み取れない
クラス側に振る舞いを持たせることを徹底したら結果的に戻り値は減ると思うけど?

459デフォルトの名無しさん2016/12/18(日) 20:54:43.00ID:UQRskdKk
>>450
大原則としてOOPでデータと処理を一体化することは認めてて
原則には例外がつきものだっていう話に見える

それで結果的に戻り値を使うことは減るし
一方的に正しいとかいう話じゃないように見えるが

460デフォルトの名無しさん2016/12/18(日) 20:56:20.23ID:05Ug+E6t
>>458
戻り値が減るんじゃなくて、
戻り値を取得するメソッドが減るだけ。

> 原理主義的なOOPは返り値をあまり使わないよ
って言ってるから間違い。ほとんどのメソッドの戻り値を返している。
戻り値を返すのは戻り値を使う必要があるから。

> Rubyでは戻り値を使う代わりにブロックを渡して引数で結果を受け取るということが非常によく行われるけど、あれはこの原則に従ってるんだよ
コールバックは、Tell, Don't Askの原則に従うためのものじゃないから間違い

461デフォルトの名無しさん2016/12/18(日) 20:59:15.37ID:05Ug+E6t
重要なのはデータと振るまいを同じ箇所に置こうすることであって
戻り値をつかわないということではない。

原則の理由を理解せずに、その結論だけしか見てないから、
間違った話をしてる。コールバックとか全く関係ない。

462デフォルトの名無しさん2016/12/18(日) 21:02:15.78ID:05Ug+E6t
× 戻り値が減るんじゃなくて、戻り値を取得するメソッドが減るだけ。
○ 戻り値が減るんじゃなくて、オブジェクトの状態を取得するだけのメソッドが減るだけ。

こう言った方がより正確かな。

463デフォルトの名無しさん2016/12/18(日) 21:03:57.14ID:cqEHlGhD
誰か俺の疑問に答えてくれよ…夜も眠れねえよ…

464デフォルトの名無しさん2016/12/18(日) 21:04:25.47ID:cqEHlGhD
438のところな

465デフォルトの名無しさん2016/12/18(日) 21:04:32.81ID:05Ug+E6t
夜眠れないのは昼寝てるからでは?

466デフォルトの名無しさん2016/12/18(日) 21:06:25.41ID:05Ug+E6t
>>464
だから可読性の問題なんだから、サンプルコードじゃなくて
具体的な使用例を見せてもらえないと答えようがない

467デフォルトの名無しさん2016/12/18(日) 21:22:30.19ID:hjqTwWMB
>>463
>>425が言ってるのはこういうこと
・アプリ内の全てのDBアクセスは単一のDB管理クラスのインスタンスで行っている
・DB管理クラスのインスタンスはアプリ起動時に作成しておいて各コンポーネントで共有する
・アプリは最初はDBに接続しておらず、あるボタンが押された時点ではじめてDBに接続する
この場合、ボタンが押されときにDB管理クラスのインスタンスの「DBに接続せよ」メソッドを呼べばよい

この設計の是非はともかく、つまりミクロなプラクティスの話とアプリ要件の話をごっちゃにした頓珍漢な意見なので気にしなくていい

468デフォルトの名無しさん2016/12/18(日) 21:28:14.52ID:GM9JkVQ+
>>467
言ってることは分かるけど疑問に対する回答になってないような?

469デフォルトの名無しさん2016/12/19(月) 10:06:49.21ID:InX2WCwb
はじめてRuby触るしコーディングなんてOracle SQLくらいしか触ったことないんだけど
無茶かな。
DiscordrbっていうGEMが用意されているんだけど、Rubyでこういうのを使う方法がいまいちわからない。

そもそも英語ができないから英語のDocsをヒーコラいいながらやってんだけどやっぱ無茶かなぁ。
誰かDiscordrb使ったDiscordBOT作ってる人いませんか?ソース見せてほしいんだけど無理かな。

470デフォルトの名無しさん2016/12/19(月) 15:41:24.93ID:42zKLbbA
基礎 Ruby on Rails、このスレでお勧めされてから買ってみたけど
確かに分かりやすいわ
もっと早く買えば良かった

471デフォルトの名無しさん2016/12/22(木) 12:21:08.39ID:uTQf0x1y
>>469
いきなりdiscordbot無茶だろうけどいきなりrubyは無茶じゃないので頑張れ
まずはネットで日本語でいくらでも転がってるrubyのチュートリアルをこなそう
rubyの基本がわかればbotなんてすぐ作れる

472デフォルトの名無しさん2016/12/22(木) 13:02:42.80ID:y+mdv7YD
>>468
ほんそれ

473デフォルトの名無しさん2016/12/23(金) 20:42:12.81ID:cbA/B5V7
言語のしくみ
買ったった

474デフォルトの名無しさん2016/12/27(火) 02:28:17.51ID:ajopm1PJ
pryってどういう仕組みなんだ?
evalだとbindingオブジェクト渡してもeval抜けるとローカル変数とか無かったことにされるけど(ブロックと同じ扱いだから?)、pryだとローカル変数定義してアクセスしたり出来るよね
どうなってんだ

475デフォルトの名無しさん2016/12/27(火) 07:56:05.95ID:8zCgjK7F
>>474
都度同じ binding 渡して eval する。

476デフォルトの名無しさん2016/12/27(火) 22:05:49.17ID:Vfoy9oEH
seleniumをFirefoxPortableで使っているのですがSeleniumでプロファイル指定して起動しても
ログイン情報が保存されません。
seleniumもFirefoxも古いバージョンにしています(それぞれ2.6.8と45.6.0)。
インストール版のプロファイルをコピーしてポータブルのプロファイルフォルダに入れて
お気に入りやアドイン等やログイン情報は保持されています。
ところがseleniumで起動するとログイン情報だけが消えているものがあります。
FirefoxPortable単体だけだと問題ありません。

477デフォルトの名無しさん2016/12/27(火) 22:13:26.69ID:Vfoy9oEH
プログラムの内容の出だしはこんな感じです。
firefox_path = 'D:/MyProgramFiles/FirefoxPortableESR/FirefoxPortable.exe'
Selenium::WebDriver::Firefox::Binary.path = firefox_path
default_profile = Selenium::WebDriver::Firefox::Profile.new('D:/MyProgramFiles/FirefoxPortableESR/Data/profile')
default_profile.native_events = true
driver = Selenium::WebDriver.for :firefox, :profile => default_profile

なんとかプロファイル情報を入れてログインを保持して起動できる方法が
ありましたら教えてください。

478デフォルトの名無しさん2016/12/27(火) 23:04:19.31ID:/xLMC5SK
ログイン情報が設定されていないか、設定されていても取得されていないか、
取得されていても上書きされているとか、デバッグして、どれに該当するのか見極める

そもそも、ローカルPCに、サーバーを立てていなくても、
ローカルファイルを直接取得できるのか?

セキュリティや、非同期によるタイミングの違いで、取得できないとか、
エラーメッセージが無いと原因がわからないので、デバッグして原因を絞り込む

479デフォルトの名無しさん2016/12/30(金) 00:13:53.15ID:9LIeFW7F
エラーメッセージが出ないのでやっかいですよね。
Rubyを使い始めて間がないので、デバッグといえば、コンソールのエラーメッセージ
だけが頼りです。
7つのサイトのうち2つのサイトにログイン情報が反映されません。
すべてではありません。
ブックマークも反映されています。

>そもそも、ローカルPCに、サーバーを立てていなくても
selenium 3.04 + Firefox 50.1.0ではselenium-server-standalone-3.0.1.jar
を使わないと起動できませんでした。
その際は既存のプロファイル指定しなければ起動できましたが、指定すると
起動できませんでした。
そこでselenium、Firefox両方ともバージョンダウンしてプロファイル指定したら
読み込めたのでこのまま使おうかと思ったら、上記の問題に当たりました。
たちまちはログインIDなどを入れて対処していますが、もしかしてサイト側のほう
cokkieとかの情報がインストール版のFirefoxと違うとかで自動ログインを拒絶して
いるのでしょうか。

480デフォルトの名無しさん2016/12/30(金) 05:07:24.07ID:VibH/69b
>>479
pryとかirbとかで止めてステップ実行してみれば?

481デフォルトの名無しさん2016/12/30(金) 06:54:47.15ID:AE3qYxRw
Rubyの、debug ライブラリとか、
--debug で、デバッグモードでスクリプトを実行するとか。

それか、JavaScriptもデバッグする。
Rubyじゃなく、JSでエラーが起こっているのかも?

ブラウザの、UserAgent を偽装するとか、
Wireshark で通信パケットを見るとか

PhantomJS を使っている、Poltergeist を使うとか

482デフォルトの名無しさん2016/12/30(金) 15:45:46.55ID:P9AmXfqG
ダックタイピングの良さが全くわからない。
ソースコードの規模が大きくなるほどそう思う。

483デフォルトの名無しさん2016/12/30(金) 16:36:49.92ID:hgBVSCl8
>>482
事前にコンパイルせずにオブジェクトに対するメソッド呼び出しを実現する手段がダックタイピングなだけ
あくまで実装の都合であって、ユーザーにとってはデメリットしかないよ

484デフォルトの名無しさん2016/12/30(金) 17:01:07.05ID:kHcR/QEK
>>483
> あくまで実装の都合であって
この人言語実装経験あるんだろうか?

485デフォルトの名無しさん2016/12/30(金) 17:07:01.97ID:hgBVSCl8
>>484
俺はあるけど、なくてもメソッド呼び出しの仕組くらいは知っておいて損はないよ

486デフォルトの名無しさん2016/12/30(金) 17:22:22.33ID:Q3tvxZdg
rubyしか知らないひとか

487デフォルトの名無しさん2016/12/30(金) 23:12:15.48ID:AE3qYxRw
クラスに継承関係が無くても、同名のメソッドが動作する

こんな仕様で、アプリを正常に作れるわけないだろ!

488デフォルトの名無しさん2016/12/30(金) 23:24:34.64ID:zOAKiPoz
>>487
>クラスに継承関係が無くても、同名のメソッドが動作する
10年前の人かな?
そんなの今じゃ珍しくもないよC#なんかもそうだし

489デフォルトの名無しさん2016/12/31(土) 00:49:15.11ID:6BifHuQd
え?そうなの?

490デフォルトの名無しさん2016/12/31(土) 01:39:57.58ID:2NsOdIiQ
インターフェースってそういうもんだろ?
VB6だって継承関係なくても動作するわ
(そもそも継承できない)

491デフォルトの名無しさん2016/12/31(土) 03:02:31.26ID:SUY5h6ni
まあ型のあるなしで大違いだけどね

492デフォルトの名無しさん2016/12/31(土) 11:20:21.87ID:u4bGwJtr
Pythonは静的型検査を導入してほぼ完全な静的型言語になった
RubyもやろうとしてるけどRailsに汚染されきったメタプログラミングまみれのRubyじゃ
不可能というかできてもほぼ意味をなさないだろうね

493デフォルトの名無しさん2016/12/31(土) 11:44:35.59ID:+6N7nKtI
Rubyは静的型なんてやらないよ
3.0でやるのは静的振る舞い検査だよ

494デフォルトの名無しさん2016/12/31(土) 18:55:15.59ID:OmAPdSt2
正規表現のオプション
o open 式展開
x eXtend
m multiline
で覚えようと思うのですが
i って何の略でしょうか?

495デフォルトの名無しさん2016/12/31(土) 19:24:07.86ID:reFXdCEA
元ネタのperlreに書いてる

496デフォルトの名無しさん2016/12/31(土) 19:50:32.34ID:oe8sWh56
i は ignore case
o は once でしょ

497デフォルトの名無しさん2016/12/31(土) 20:13:57.55ID:OmAPdSt2
ありがとうございました。

498デフォルトの名無しさん2017/01/01(日) 04:04:21.43ID:NQftXMbi
Rubyの現在の課題は、日本製のオペレーティングシステムを作ることにある。

499デフォルトの名無しさん2017/01/01(日) 09:11:31.29ID:IDYigKuX
無理

500デフォルトの名無しさん2017/01/01(日) 09:30:39.86ID:ls6vqNpI
mrubyがそれに近いんじゃね
見事にコケたけど

501デフォルトの名無しさん2017/01/01(日) 20:36:16.78ID:+4Jm9cV8
スレ違いならすみません。
現在比較的容易に頒布するためにJRubyを使っているのですが、
キャメルケースやセッターなどの名前をRuby風の命名規則に変更する仕組み、利用したいのですが細かいことが分からずに少し困っています。
例えば "A.setValue(x)" は "A.value = x" と書くことができるようですが、
対して "A.setValue(x, y)" はうまく書き換えられてくれないみたいです。
諦めて元の名前を使えば問題ないのですが見た目的にどうも気持ち悪くて、詳細を調べているのですが見つかりません。
どなたかご存じでしたら提示いただけませんか?

502デフォルトの名無しさん2017/01/01(日) 22:03:52.66ID:yOnXwyd5
>>501
引数が2つの時点でそれはセッターではない

503デフォルトの名無しさん2017/01/03(火) 17:46:16.30ID:qzU7aiCI
ひろいもの
nicovi
watch/sm3721257
watch/sm8240485
watch/sm11915031

504デフォルトの名無しさん2017/01/05(木) 18:13:23.71ID:iZVemvXm
楽しいRuby読み終えて何か作ろうと思うけど今一思いつかん
なんかステップアップするのに良い本とか無いかね
独学でやってるからどうやって勉強進めれば良いか分からん

505デフォルトの名無しさん2017/01/05(木) 18:22:58.87ID:wwAKte96
太古の過去の大昔から言われてるが、Rubyは基本的に日常ツール作成言語なので
「メソッド動作解説とか読んでもなお作りたいものが思いつかないなら一旦Rubyのことを忘れて街に出ろ」
というのがある
カナヅチとクギの使い方を習ったから何か作りたいが何も作るものがないという状態に同じ
カナヅチとクギがパーフェクトに使いこなせてよかったという瞬間は今後いつか修繕とか組み立てとかやるときに来る
その時までとりあえず忘れておくといい
今の君は自作で補うべき不満不足を感じていない幸福な状態なのだ

506デフォルトの名無しさん2017/01/05(木) 21:18:23.58ID:ovbTWOBk
504じゃないけど、DXRubyとか気になるけど手軽な配布手段がないから躊躇っちゃうんてすよね
exerbは1.8.xまでしか対応してないみたいだし、Ocraはゲームとしては不格好な上に日本語で死ぬし、
スクリプト組み込んでビルドするとかは正直よくわからない……

507デフォルトの名無しさん2017/01/05(木) 21:49:13.47ID:6Ysz1KPl
いやだから単体のWindowsアプリケーションやらゲームアプリやら作りたいのならRubyは駄目だよ
そういうのはたとえばC#とか使うんだよ
使う道具間違ってるよ

508デフォルトの名無しさん2017/01/05(木) 22:32:43.59ID:H72KpT5C
>>504
競技プログラミングでもやってみるといいかもしれない
アルゴリズムの勉強にもなるし

509スッキリ厨2017/01/05(木) 23:19:04.23ID:sjDvcQUe
まずこの本で、オブジェクト指向を学ぶ
スッキリわかる Java入門 第2版、2014

その後、この2冊をこの順で読む
たのしいRuby 第5版、2016
みんなのPython 第4版、2017

Rubyなら、この本がプロ必須本
Effective Ruby、2015
バグが起きにくい、安全で効率的なコーディングと、間違いやすいポイントを解説

510デフォルトの名無しさん2017/01/06(金) 02:55:51.51ID:JXu3PrlH
>>507
そこらへんは悪癖ありますね……
目的が「○○を作る」から「Rubyを書く」にシフトしてる感がかなり
趣味だから実害はないんですけど、Rubyしか書けないわけじゃないのに勿体ないなという気は

511デフォルトの名無しさん2017/01/06(金) 07:07:39.97ID:kp2I/0bG
勿体無いとかじゃなくて、一つの言語ばかり使ってると頭悪くなるよ

512デフォルトの名無しさん2017/01/06(金) 15:34:04.71ID:XtKi9eaG
>>504
RubyTk

513デフォルトの名無しさん2017/01/11(水) 00:39:17.09ID:HUwWJ24p
https://twitter.com/btnrouge/status/818831232494505985
外部の人間にとってRubyコミュニティはmatzを教祖とするカルト教団と捉えるとわかりやすいです。ピンとこなければ、Rubyコミュニティとオウム真理教を比較してみればいい

https://twitter.com/btnrouge/status/818835680260259840
今やれることは、猪股、田籠、渋川の殺害依頼と、有賀に対する脅し(和解に応じなければ妻子に危害を与える)

https://twitter.com/btnrouge/status/818840182833041410
有賀康顕潰しはやりたい。貴様が要らんこと言ったからことが大きくなったのだから、責任くらい取れよ!(生命までは奪わない)

https://twitter.com/btnrouge/status/818839029646921729
そう言えばdnasoftwares=江原望は自宅件オフィスを完全に抑えているので、奴の生き死にはすべて僕が掌握したも同然です。89式銃剣のレプリカでぶん殴るとか、その他いくらでも報復は可能。まあ、当面は放置ですかね

514デフォルトの名無しさん2017/01/11(水) 22:25:34.60ID:OZsqhVFv
>>478,480-481
すいません。2chにサーバーエラーで入れなかったのでお礼も言えなくて申し訳ありません。
Selenium3.05(3.04から微妙に上がってた)に戻してブラウザも今使っている最新にしました。
https://github.com/SeleniumHQ/selenium/issues/2933
一応ここのRemote?で動きましたが、やはり特定のサイトだけcookie情報を見ている
らしく、ログインを求められます。プロファイルは今使っているものをそのままコピーしたものです。
本当は今使っているプロファイルをそのまま使いたいのですが、先にSelenium無しで
Firefoxを起動するとpermission errorになるのでコピーしたものを使っています。
タスクバーに出ているアイコンを右クリックして出るメニューで、新しいウインドウで
開くようなことはできないのでしょうか。

515デフォルトの名無しさん2017/01/12(木) 01:53:58.83ID:CLJ6Gs1e
個々のサイトは、Rubyの言語とは関係ない。
各サイトで、使えるブラウザも異なる

自分が作ったものではないサイトの場合、そのサイトがAPIを公開していない場合は、
そのサイトに聞くしかない。
勝手に解析して、アクセスするのは、まず無理

クローラーを作る場合でも、他人のサイトを解析する部分が、最も難しい。
なぜなら、仕様が分からないから

そういうサイトは、相手にしない方がいい。
無限に時間が掛かって、しかも失敗に終わるから

516デフォルトの名無しさん2017/01/12(木) 10:12:46.64ID:kXAP6NzE
>>515
そうですね。確かにおっしゃるとおりです。
諦めることにしました。
色々とありがとうございました。

517デフォルトの名無しさん2017/01/13(金) 09:02:42.85ID:SVvqQk93
今の異常なPython本ラッシュみていると、機械学習ブームでPython使う奴が
増えて、他の用途でも便利に使えるとわかる数年後ってほんとにRubyのピンチ
かもね。
同じような用途で使えるLLで二つ覚える意味ってないもんな。

518デフォルトの名無しさん2017/01/13(金) 16:52:53.57ID:mqUzyOXD
rubyは1.8.7あたりのきらめきが無くなっていったね
2.0のときに意外とスッと入ってこなかったのはなぜだろう
個人的には笹田さんという人間の違和感だと思ってる
彼の人柄や能力について一切知らないし一切ケチつけるつもりはない
言いたいのはまつもとさんとRubyの一体感みたいなもんが好きだったってこと
そのことにあとからようやく気がついた

519デフォルトの名無しさん2017/01/13(金) 23:03:52.14ID:9cq37382
>>517
> 同じような用途で使えるLLで二つ覚える意味ってないもんな。
むしろ片方しか使えないとかいう方がやばい
どっちもかるくつまみ食い程度はしておかないと、片方がポシャったときに潰しが効かない

520デフォルトの名無しさん2017/01/13(金) 23:12:36.13ID:P5aAQ1iN
いや問題はRubyがポシャりかけっていうか
もうPythonだけで良くね?って状況な点じゃないの
でもRailsあるし! -> Rails以外死ぬ -> 代替が出てRailsも死ぬ
という流れの不可避感

521デフォルトの名無しさん2017/01/13(金) 23:18:26.24ID:9cq37382
>>520
じゃぁ Python は機械学習だけじゃね?という見方もできるよね
機械学習は今でこそトレンドだが、AIなんて第何次ブームなんだよというぐらい盛衰の激しい分野だし

522デフォルトの名無しさん2017/01/13(金) 23:32:48.24ID:pzDMg4F2
大勢が決まってからそちらをやる、という人と
今後どちらになっても対応出来るように
今のうちに両方触っておくという人と
2つのタイプがいると思うのだけど、
優秀な技術者はどちらのタイプだと思う?

5235172017/01/14(土) 00:04:24.79ID:6M7JqjoN
>>520
そうそう、言いたかったのはそれ。
日本だけでもRuby優位は当面続くかと思ってたらここ2年弱ぐらいの雰囲気の変化というか、
本屋の書棚をみているだけでもPythonコーナーの増え方がすごくて、なんかいきなり決着
が付きかけているんじゃないか、と。

>>521
それは確かにそう思う。今でてる大半のPython本が機械学習関係、それもnumpyやscipy、pandas
とかのライブラリ解説本みたいなのばっかりだし。

ただこの勢いは馬鹿にできないきがするというか、機械学習を入り口にPython使い始めた
層が他の用途にも使い出すと怖い気がする。

RubyってやっぱRails頼みなとこあるし。

524デフォルトの名無しさん2017/01/14(土) 00:24:16.00ID:zIw5cAWr
>>523
そんな余計な心配してる暇があるなら手を動かせ。コードを書け。
技術者なら一つの言語と心中するな。言語の寿命なんて誰にも読めないんだから
いつでも対応できるようにしておけ。

525デフォルトの名無しさん2017/01/14(土) 07:47:10.66ID:6M7JqjoN
>>524
なんだろう?

飲み屋でくだらない雑談とわかってしている話に割り込んで「お前ら明日からもっと
ちゃんと働け」と情報量ゼロのつまらん正論言って、説教したつもりでいい気分、
でも自分が一番社会の役に立ってない産廃オヤジの臭い口臭でも浴びたかのような
不快感全開だわ

むしろ通常の荒らしの方がマシってくらいに

お前みたいなクズは死ね

526デフォルトの名無しさん2017/01/14(土) 10:54:53.80ID:aYU1jhzZ
笑った

527デフォルトの名無しさん2017/01/14(土) 11:08:25.24ID:zmTeKxXB
>>522
どちらでもない
優秀なのは目的に応じて適切な道具を学ぶタイプ

528デフォルトの名無しさん2017/01/14(土) 12:07:53.22ID:eWNJ08o1
ruby/tkに関連した本があんまり無い悲しみ
GUI系のやつはやっぱりrubyだと難しいのかね

529デフォルトの名無しさん2017/01/14(土) 17:14:29.49ID:qkQ2nYQV
無難にScalaFXにしとけ

530デフォルトの名無しさん2017/01/14(土) 20:15:30.56ID:noNswiiv
Ruby/TKで作ろうとしたら
なぜかTcl/TKの勉強をしていたでござる

531デフォルトの名無しさん2017/01/15(日) 00:06:23.18ID:fjyotEZW
すみません、ガチ初心者なんですが質問良いでしょうか。
railsでユーザーを登録する、という作業をしているんですが

バリデーションエラーで@user.saveが失敗し
render :action => 'new' で戻るとき
urlが/users/newから/usersに変わるのは何故なんでしょうか

532デフォルトの名無しさん2017/01/15(日) 01:24:47.31ID:mPtAA3FD
>>531
RailsがPRGパターン(ポストバック)を使ってないから。
URLがそうなるのがいやだからPRGパターンの方がいいのに。
Railsはクソ

533デフォルトの名無しさん2017/01/15(日) 01:28:33.08ID:mPtAA3FD
いや、PRGパターンは使ってるか。
使ってないのはポストバックか

534デフォルトの名無しさん2017/01/15(日) 09:17:25.26ID:FuNxoLD6
https://twitter.com/btnrouge/status/820064836910317568
どこかのエセOSSプログラミング言語処理系の連中にとやかく言われたくない、という気持ちは正直言って、ある。

https://twitter.com/btnrouge/status/820284198262951936
敢えて言おう!Rubyはオープンソースではないと!(ギレン・ザビの演説風に)

https://twitter.com/btnrouge/status/820284692838522880
敢えて言おう!Rubyコミュニティはカスであると!(ギレン・ザビの演説風に)

https://twitter.com/btnrouge/status/820285576024768516
前掲の通り、オープンソース=OSIによって承認されたライセンスに基づいて配布されているソフトウェア。
Rubyは一部をOSI非承認ライセンスで配布しているため、実態はオープンソースに準じているものの、厳密にはオープンソースではない。

https://twitter.com/btnrouge/status/820302804988227587
表で「Ruby界隈の連中はオウム真理教と同じカルト教団で、教祖はMatz(まつもとゆきひろ)だ!」と英語でツイートしたが、今のところ反応なし。
日本人って、英語のツイートに対してはほぼスルーなんだね。たとえ、それが自分たちの存在自体を否定されるものであったとしても。

https://twitter.com/btnrouge/status/820420780827648000
表は例の一件で日本のRuby界隈が一斉ブロックに走ったらしく、どれだけRubyに対するHateを口にしても、誰も絡まなくなった。ある意味平和。

https://twitter.com/btnrouge/status/820421760092778497
普通、Rubyistsに向かって「お前ら全員、新興宗教だ」なんて口走ったら、それこそ間髪入れずフルボッコにされるぞ。それがなかったからな。
----------
(株)アイネスのCSVエンジニアおじさん(笑)、蓮沼賢志氏がお怒りの模様。

535デフォルトの名無しさん2017/01/15(日) 12:04:08.29ID:mPtAA3FD
>>534
見れない。チキン野郎にようはないよw

536デフォルトの名無しさん2017/01/15(日) 17:18:05.90ID:kfhl0y+Q
もしかしてゲームとかGUIやりたいならrubyじゃダメだったのか
WEBページ上で動作するアプリとかゲーム作りたい!

railsならWEBページ簡単に作れるのか!勉強しよう!

あれ、そもそもrubyでGUIとかゲームって無理ゲじゃね?←今ココ

537デフォルトの名無しさん2017/01/15(日) 17:47:35.08ID:NauD/H/+
>>536
昔のソシャゲみたいな動きのない糞クリックゲーなら作れるよ
それ以上のことをしようとするとJavaScriptが必須
サーバーサイドの処理を必要としない、ブラウザ上だけで完結するアプリやゲームならRubyは全く出番なし

538デフォルトの名無しさん2017/01/15(日) 18:06:48.02ID:HaWyrA9g
RubyでGUIプログラミング向かないのは最初から明らかだったんだけど
アスペ気質の人が「そんなことはないRubyでウィンドウプログラミングは可能だ」とか言い続けたせいで被害が拡大したという経緯がある
実現可能かどうかという話をしたかったわけじゃないんだけど手遅れになるまで(あるいは今もなお)わかってもらえなかった

539デフォルトの名無しさん2017/01/15(日) 18:14:04.57ID:JblLfoH8
それこそTcl/Tkにおいて内部処理としてTclで書かずにRubyで済むイヤッホー安楽みたいな需要だったのだが
なんかどっかで感覚のボタン掛け違えたまんま布教した人がいるのだ
>>536は過去の黒歴史の被害者なので気に病まんで良いぞ

540デフォルトの名無しさん2017/01/15(日) 18:38:06.31ID:mPtAA3FD
ゲーム作るならUnity一択だろ

541デフォルトの名無しさん2017/01/15(日) 22:02:42.33ID:x6BIGD4Q
>>536
GUIならパイソン一択だろ

542デフォルトの名無しさん2017/01/15(日) 22:15:06.06ID:zZ/oXiuq
>>541
え?

543デフォルトの名無しさん2017/01/16(月) 00:37:25.63ID:kuqQ4eTX
GUIはwx、2DゲーならSDLつかえば好きな言語でかけるっしょ

544デフォルトの名無しさん2017/01/16(月) 04:26:13.77ID:bXP/pRvj
>>538
早速湧いたなw

545デフォルトの名無しさん2017/01/16(月) 08:00:22.63ID:u5Vbexco
YAML.load_file
はあって、
JSON.load_file
がない理由って何かあるんですかね?

546デフォルトの名無しさん2017/01/16(月) 10:36:20.23ID:3Uu7W/fv
>>545
作った人が違うから

547デフォルトの名無しさん2017/01/16(月) 21:55:57.28ID:u5Vbexco
なるほど。
ありがとうございました。

548デフォルトの名無しさん2017/01/16(月) 23:21:24.24ID:wb4vYWob
RubyってPythonに負けたから組み込み式に移行するのかねぇ。

549デフォルトの名無しさん2017/01/16(月) 23:29:50.89ID:5jfXPHqe
http://3qilabs.com/how_to/how-to-save-load-cookies-using-watir-webdriver/
ここでクッキーをファイルに保存すして読み込む方法を書いていますが
自分の環境ではうまく動作しません。
この部分で引っかかります。
driver.manage.add_cookie(:name =&gt; temp_o["name"], :value =&gt; temp_o["value"])
&gt;の部分で引っかかっているので調べてみるとURLを使うときの'>'のことだと
書いてあったのですが、何かrequreしないといけないものとかあるのでしょうか。
取得は成功しますが、ここの読み込みで失敗します。

550デフォルトの名無しさん2017/01/16(月) 23:36:17.67ID:9C4LWgsi
>>549
そのページのミスでしょ
&gt; を > に変えればいい

551デフォルトの名無しさん2017/01/18(水) 14:32:48.83ID:SYbqEbJ6
>>550
ありがとうございます。
ついでに欲張って
browser.driver.manage.add_cookie(:name => temp_o["name"], :value => temp_o["value"],
:path => temp_o["path"], :domain => temp_o["domain"],
:expires => temp_o["expires"], :secure => temp_o["secue"])
としたところ、ファイルから読み込むときにdomainで引っかかりました。
リンクの通りnameとvalueだけなら問題ありませんでした。
よく分かってないのでとんでもないことを質問しているかもしれませんが
domainはセキュリティとかで再現できないものなのでしょうか。
一応そのサイトのページにはgotoで入っています。
http://stackoverflow.com/questions/18288244/save-and-restore-watir-session
ここのリンクのように
サイトに入る→cookie保存→いったん終了→サイトに入る→クッキークリア
→クッキー読み込み→サイトに入る→リフレッシュ
のようにすれば、確かにログインを再現できましたが(domainとかつけてない状態で)
できればurlに入る前に再現できないものなのでしょうか。

552デフォルトの名無しさん2017/01/19(木) 18:07:07.15ID:G8jkDaEj
馬鹿には無理

553デフォルトの名無しさん2017/01/20(金) 01:57:29.15ID:/ixeQkYS
SSH・ログイン処理とか、ややこしい

基本的に、APIを公開していないサイトでは、自動操作は出来ない。
元々、サイトが自動操作できるように作られていないから

だから、そういうAPIを公開していない、各サイトを分析するのが大変。
ブラウザ種別を偽装したり、通信パケットを解析したり

そのサイトが、ハッシュなどを計算して確認していれば、まず正常には動かない

そういう、クローラーを作っていて、動かないサイトは、
ブラックリストに入れて探索しないこと

こういう質問は言語ではなく、各サイトのビジネスロジックの話だから、
仕様書がない者同士が話しても、仕方がない。
各サイトの担当者に聞くしかない

「Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例、
佐々木拓郎・るびきち、2014」
この本にも、クローラーではなく、公開しているAPIを使うように書いてある

554デフォルトの名無しさん2017/01/20(金) 04:17:00.52ID:SuI25zgd
ブラックリストに入れる前にブラックリストに入れられてしまったでござる

555デフォルトの名無しさん2017/01/20(金) 07:23:53.70ID:73D0Dll6
クローラは最底辺の仕事
というかコソ泥そのもの、まっとうな仕事ではない

556デフォルトの名無しさん2017/01/21(土) 13:24:24.68ID:KtdMCRkZ
>>553
一般の本でAPIつかえと書くのは当たり前だろw

557デフォルトの名無しさん2017/01/21(土) 13:25:14.26ID:KtdMCRkZ
>>555
Googleのことか?
世界有数のトップ企業だけども?
何が底辺なの?
貧乏人のやっかみにしか聞こえんが?

558デフォルトの名無しさん2017/01/21(土) 14:23:03.34ID:Poucv/rB
倫理的な問題は置いといても、
泥臭くてつまらない力作業ばかりなのは確かだと思うよ
スクレイピングとGUI自動テストはプログラミングの底辺

559デフォルトの名無しさん2017/01/21(土) 14:30:31.45ID:yR+dIRXC
そのうちAIが勝手にやってくれる

560デフォルトの名無しさん2017/01/21(土) 16:39:22.18ID:0yByJcs8
泥の付いた野菜をそのまま売るのと
きちんと調理して売るのとが一緒なわけ無いだろ

561デフォルトの名無しさん2017/01/21(土) 20:33:31.17ID:6NvQGvfC
robot.txt を遵守して、1日1回しかアクセスしないのなら、営業妨害にはならない

これを守らないから、営業妨害で逮捕される。
だから、APIを公開している企業と契約してから、APIでアクセスすべき

2chなんか、無断でAPIにアクセスしても、刑事告訴してくる

562デフォルトの名無しさん2017/01/21(土) 21:01:42.93ID:do3CYLP8
誰も営業妨害の話はしていない

563デフォルトの名無しさん2017/01/22(日) 23:21:11.92ID:kJbHnChQ
作りながら学ぶRuby入門、面白いなこれ
色々分かりやすいし
なんでこれが絶版になったのか分からん

564デフォルトの名無しさん2017/01/23(月) 13:47:35.73ID:vFvi2mPp
rubyを造るのか

565デフォルトの名無しさん2017/01/24(火) 12:27:57.85ID:ZplzBBh2
こんにちは!
学生時代、C言語によるプログラミング大好きなものでしたが、
Rubyもぜひとも勉強をさせていただきたいと考えています。
Rubyを勉強させていただくのに便利なサイトなどは
ございますでしょうか?
当方、工学博士です。

よろしくお願いします。

566デフォルトの名無しさん2017/01/24(火) 14:58:12.73ID:wfxe1Gqr

567デフォルトの名無しさん2017/01/24(火) 22:03:31.14ID:4S1Y2ldw
「たのしいRuby 第5版、2016」を読む方が速い

568デフォルトの名無しさん2017/01/24(火) 23:12:05.89ID:bwm6iN8W
工学博士ならPython覚えた方がいいよ

569デフォルトの名無しさん2017/01/25(水) 00:59:04.43ID:SIOVzfzG
みなさんおすすめのエディタやその設定を教えてください
当方、人間です

570デフォルトの名無しさん2017/01/25(水) 01:55:28.96ID:/Hgbftsx
人間なら秀丸エディタでいいよ

571デフォルトの名無しさん2017/01/25(水) 06:35:09.16ID:FiroNNp+
Rubyのrescueの書き方ですが、
Javaのように例外範囲を広げていくような実装はないコードも書けてしまいますが(死にコードが出る)
何か理由があるんですかね?

572デフォルトの名無しさん2017/01/25(水) 06:35:49.12ID:FiroNNp+
実装はない => 実装ではない

573デフォルトの名無しさん2017/01/25(水) 07:39:06.50ID:VdWl0ItW
そのへんは一応は「RubyはJavaではないから」「それやってくとJavaになっちゃうじゃないか」あたりが回答になるんだが
適当にStandardErrorかRuntimeError継承して自作して捕まえてくれという運用が引っかかる?

574デフォルトの名無しさん2017/01/25(水) 07:45:17.92ID:a2fwv9ft
Javaの検査例外は失敗だったというのが定説だよ
実際、後にも先にもJavaしか採用されてないよね
その辺の議論を詳しく知りたいなら「Java 検査例外 失敗」でググれば沢山出てくる

575デフォルトの名無しさん2017/01/25(水) 08:00:25.68ID:r85LtB2a
ScalaやKotlinのようなJVMで動く新言語ですら検査例外は外されているという事実があり、
検査例外は失敗だったという結論には現在においてはもう全く議論の余地は無いのだけれど、
RubyはそもそもJavaと同時期に生まれた古い言語なので事情が違う
Rubyは静的型をしない言語だからそもそも検査例外はやりたくても実装できないんだよ

576デフォルトの名無しさん2017/01/25(水) 08:21:33.57ID:FiroNNp+
そうだったんですね。

自分、Java → Ruby の流れで勉強してきて、多言語はJavaしか知らず、
Javaの検査例外が合理的だと思っていたもので。

「Java 検査例外 失敗」で
なぜ、失敗と言われているのかを調べてみます。

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

577デフォルトの名無しさん2017/01/25(水) 08:23:16.13ID:FiroNNp+
多言語 => 他言語

誤字多くて申し訳ないです。
投稿する前は見直す癖を付けないと。

578デフォルトの名無しさん2017/01/25(水) 08:45:12.06ID:c3+bwXVx
>>575

そういう理由もあるんですね。
ありがとうございました。

579デフォルトの名無しさん2017/01/25(水) 12:30:16.31ID:nNSnM2U8
モジュールの中にモジュールをインクルードつてできないんですか?

580デフォルトの名無しさん2017/01/25(水) 15:10:04.27ID:iQOG6Lyn
#change.rb
datafile = ARGV[0]
str = File.open(datafile).gets(nil)
x = apple
y = banana
z =cherry
puts ?

#words.txt
x y z

この場合、出力結果が
>ruby change.rb 〜.txt
apple banana cherry となるようにしたい。

putsの後をどうすれば、
テキストファイルに代入した後の
結果が出力されるのでしょうか?

581デフォルトの名無しさん2017/01/25(水) 16:28:45.21ID:jrtlHhYR
>>580
色々突っ込みどころがあるけど
もしword.txtが
z x aaaa y
だったら
cherry apple aaaa banana
を出力したいってことで合ってる?

582デフォルトの名無しさん2017/01/25(水) 16:50:09.65ID:VdWl0ItW
一番聞くべきは学校とかの提出課題かどうかだろうな
下手に習ってない手法使うとバツされるぞ

583デフォルトの名無しさん2017/01/25(水) 17:38:22.65ID:225SZjEG
合ってます!
提出課題ではないです。

584デフォルトの名無しさん2017/01/25(水) 18:58:23.88ID:gQWsM4T7
どう書くかすごく迷った
each_lineとgsubを覚えて帰ってもらえると僥倖

infile = File.open(ARGV[0]).read
outfile = ''
infile.each_line do |line|
outfile << line.gsub(/x/){'apple'}.gsub(/y/){'banana'}.gsub(/z/){'cherry'}
end
puts outfile

585デフォルトの名無しさん2017/01/25(水) 20:50:06.31ID:uSRNEv10
ファイル読むときは
ARGF.each do |line|
が便利
あと気になるのは正規表現つかうなら前後に \b が必要なのと
xyzのHash化、outfileの存在

586sage2017/01/25(水) 21:38:11.99ID:nArJwlJe
datafile = ARGV[0]
str = File.open(datafile).gets
str['x'] = 'apple'
str['y'] = 'banana'
str['z'] = 'cherry'
puts str

587デフォルトの名無しさん2017/01/26(木) 00:49:41.88ID:kgwkgRe2
パーフェクトRubyとパーフェクトRalis買ったけど
今一どういう風に読み進めればいいか分からん
どういう風に使えば良いんだこれ

588デフォルトの名無しさん2017/01/26(木) 01:04:02.19ID:wtD2pOnN
>>587
どんな本でも同じだと思うが、まずは写経からはじめよう

589デフォルトの名無しさん2017/01/26(木) 12:52:52.40ID:++maIYxb
たのしいRuby 第5版、2016

Effective Ruby、2015
バグが起きにくい、安全で効率的なコーディングと、
間違いやすいポイントを解説

改訂3版 基礎 Ruby on Rails、黒田努・佐藤和人、2015

この順番で、読むのが速い

590デフォルトの名無しさん2017/01/26(木) 13:25:05.93ID:WboG9Ghq
datafile = ARGV[0]
str = File.open(datafile).gets
str['x'] = 'apple'
str['y'] = 'banana'
str['z'] = 'cherry'
puts str

これだとテキストファイル内で
xが2回出てきた時1回目の方にしか
代入されないのですが
どうすればよいでしょう。

591デフォルトの名無しさん2017/01/26(木) 13:32:22.19ID:g4Nshn9j
だからそうなるからやっちゃだめなんだって
>>586みたいに他人に教える能力のないバカは永劫黙ってて欲しい

592sage2017/01/26(木) 14:55:33.28ID:AfHRIr/a
>>590
#words.txt
z y x
だとおかしな動作になるって方向で気づいてほしかった。

'x' -> 'y'
'y' -> 'z'
'z' -> 'x'
みたいな変換だと >>584 でも破堤するよね、
元パターンの 'x' がそもそも無理な要求なんで、
通常は %PARAM_X% とか __LINE__ 見たいな特殊な文字列を予約語にして gsub を使う。
それに \% 見たいなエンコードを併用する事もあるけど、これはこれで泥沼。 (^^;

>>586 の手法は未知の文字列には使えないけど、
str="dayの気温は tmp度"
str['day']=...
str['tmp']=...
見たいなテンプレ処理に、お手軽に使える

593デフォルトの名無しさん2017/01/26(木) 15:20:57.87ID:WboG9Ghq
gsubを使ったらできました。ありがとうございます。

594sage2017/01/27(金) 10:47:26.00ID:zYqXtYNd
>>580
datafile = ARGV[0]
puts File.open(datafile).gets.split.map{|item|
case item
when 'x'; 'apple'
when 'y'; 'banana'
when 'z'; 'cherry'
end
}.join(' ')
やりたい事はこういうことだったりするのかな?
ファイルから一行読んで、空白で区切られた文字(列)を
別の文字列にして表示。

595デフォルトの名無しさん2017/01/28(土) 10:47:38.73ID:N8YHTGgV
gsub 一発で済むやん

596sage2017/01/28(土) 15:01:34.14ID:HxABDFK+
>gsub 一発で済むやん
無理じゃない?
when 'x'; 'z'
when 'y'; 'x'
when 'z'; 'y'

597デフォルトの名無しさん2017/01/28(土) 16:13:31.95ID:T61FP4t7
全く初心者向けではないから省いただけでやろうと思えばできるよ
irb> '123 x y z'.gsub(/x|y|z/, 'x' => 'apple', 'y' => 'banana', 'z' => 'cherry')
=> "123 apple banana cherry"
つまりこう
irb> h = {'x' => 'apple', 'y' => 'banana', 'z' => 'cherry'}
irb> '123 x y z'.gsub(Regexp.union(h.keys), h)
=> "123 apple banana cherry"

598デフォルトの名無しさん2017/02/02(木) 23:52:40.40ID:1pM+gvmw
Pythonにやられっぱなしだったけどデータサイエンス分野でのRubyの逆襲が始まった

http://www.s-itoc.jp/report/reaserch_results/439

599デフォルトの名無しさん2017/02/03(金) 00:18:37.83ID:L2L7vPE4
>>598
データサイエンスでプログラミング言語がPythonかRubyかなんて
何の差別化要因にもならん
ガラパゴス化を引き起こし日本の情報産業の足を引っ張る迷惑行為でしかないということをこいつらは自覚すべき

600デフォルトの名無しさん2017/02/03(金) 21:47:40.76ID:HLUtHxR2
今日本屋さん行ってオライリーのデータマインニング、AI、統計関連の書籍を見てみたら
ほぼPythonが使われてたよ、やっぱ時代はパイチンくんだよ。

601デフォルトの名無しさん2017/02/04(土) 01:54:39.71ID:dlgM/2ii
世界からマネーが集まり開発パワー1番、製品や技術が世界中に売れる国アメリカ
だからAI研究者も最多、そこではPython>ruby、だからAIではPython多数

日本でAI研究マネーを増やすか、米でruby利用者を増やすしか無い

602デフォルトの名無しさん2017/02/04(土) 20:36:42.40ID:vuXXPGjm
まつもと自身がmrubyとかいう組み込みに移行しているから無理。

603デフォルトの名無しさん2017/02/04(土) 20:51:04.22ID:yboswxMT
mrubyは補助金貰ってるから誰も使ってなくても一応開発してるポーズは見せなきゃいけない
Rails人気にも陰りが出てきたし特に次の弾もない
数年後には国内だけで一部のオタクがPerl代わりに使うだけの元のポジションに戻ってそうだね

604デフォルトの名無しさん2017/02/04(土) 21:26:45.82ID:56jDk6a3
rubyで福一も解決っていうだけで予算もらえてウハウハ

605デフォルトの名無しさん2017/02/04(土) 22:49:10.43ID:XS0fIkHD
mruby使われてるやん

606デフォルトの名無しさん2017/02/05(日) 00:41:56.62ID:Fi1WhCJO
政治に興味あるさんの中ではまつもとゆきひろは税金泥棒で
自分に反論する阿呆はまつもとのシンパなので
そういうこと言っても全くの無駄

607デフォルトの名無しさん2017/02/05(日) 00:59:47.60ID:7nH8BdTw
意味不明

608デフォルトの名無しさん2017/02/05(日) 03:55:50.37ID:f2xN2W9l
まっつんは今も日本のウケイ化を気にしているのかな?

609デフォルトの名無しさん2017/02/05(日) 11:48:02.48ID:4PxpyFKH
mrubyのコンセプトは期待しているけど動作が遅いのと日本の十八番でドキュメントがショボイのが難

610デフォルトの名無しさん2017/02/06(月) 19:12:53.13ID:hEZ+1tdD
そろそろpythonに乗り換えた方が良いのかなあ?

611デフォルトの名無しさん2017/02/06(月) 20:15:40.67ID:3oInSTA4
>>610
やりたいことによる、としか
Web系でちょこちょこやるならまだまだRailsのあるRubyは使いではあるし、流行りの機械学習とかやってみたいなら
Python使ってみればいいだろうし

銀の弾丸なんてないんだから適材適所で

612デフォルトの名無しさん2017/02/06(月) 20:52:04.64ID:WE8Ef6wq
mrubyはもう潮時だよね
時代の先端からは完全に取り残され、革新的なプロダクトも生まれそうもない以上、
Rubyがメジャーな言語として生き残るためにはプライドを捨ててIT土方の世界に売り込むくらいしかないと思う

613デフォルトの名無しさん2017/02/06(月) 20:58:39.39ID:Y/+tyt0G
ここで質問していいのか分からないけど
eclipseにaptanaのプラグインを入れてRailsを扱えるようにしたはずなんだけど
新規>Railsプロジェクト>abcっていう風にしても
表示されるターミナル上だと
$ rails .
っていうありえないコマンドが実行されてフォルダしか作成されない……
aptana本体も導入してみたけど同じ結果になった
一応は直接ターミナルから叩けば出来るから何とかなるけど不便

614デフォルトの名無しさん2017/02/07(火) 01:32:28.56ID:KcBilzUu
便乗して……
atomのautocomplete-rubyが動かずに困ってます
port:47367
Rsense Pathj:C:\Users\ユーザ名\.rbenv-win\versions\2.3.1\bin\rsense
と指定したのですが、適当に.rbファイルに単語を打つと

autocomplete-ruby: exec error: Error: Command failed: C:\Users\ユーザ名\.rbenv-win\versions\2.3.1\bin\rsense start --port 47367 --path C:\Users\ユーザ名\workspace
C:/Users/ユーザ名/.rbenv-win/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rsense-0.5.18/lib/rsense/client/runner.rb:112:in `start': uninitialized constant Spoon::FileActions (NameError)
Did you mean? FileUtils
from C:/Users/ユーザ名/.rbenv-win/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rsense-0.5.18/bin/rsense:12:in `<top (required)>'
from C:/Users/ユーザ名/.rbenv-win/versions/2.3.1/bin/rsense:22:in `load'
from C:/Users/ユーザ名/.rbenv-win/versions/2.3.1/bin/rsense:22:in `<main>

というエラーを吐かれて補完機能が働かないです……
ググってもそもそも躓くポイントじゃないのか全然ヒットしないのでどうすればいいか分からんです

615デフォルトの名無しさん2017/02/07(火) 02:58:29.60ID:e2fTv1VF
>>613
>rails .
. はカレントディレクトリじゃないの?

>>614
ファイルを、required できないのかな?

PC名・ユーザ名・ファイル名・パスなどに、半角英数字以外を使っているとか?
ファイルの文字コードが異なるとか、アクセス制限があるとか

>C:\Users\
c: 小文字のc でないとダメとか

616デフォルトの名無しさん2017/02/07(火) 08:15:49.90ID:shQZf8xN
>>615
PC、ユーザ名、ファイル名はすべて半角英数字にしてます
cを小文字にしてみましたがダメでした

617デフォルトの名無しさん2017/02/07(火) 19:47:23.39ID:TqT8diCe
>>614
spoon が読めてないようだけど、当然入れてるよね…

618デフォルトの名無しさん2017/02/07(火) 19:58:31.81ID:ohGA/Fi6
>>617
gem listで確かめてみた所、0.0.6が入ってました

619デフォルトの名無しさん2017/02/07(火) 20:56:25.20ID:TqT8diCe
>>618
gem list で使ってる Ruby と atom が使ってる Ruby は同じだよね…?

620デフォルトの名無しさん2017/02/07(火) 21:08:00.00ID:ohGA/Fi6
>>619
もちろん同じにしてます
一体何がどうなってるか本当に分からないのが……

621デフォルトの名無しさん2017/02/08(水) 01:47:47.55ID:6rskJv7R
>runner.rb:112:in `start': uninitialized constant Spoon::FileActions (NameError)

ここをデバッグすれば?
それか、エラーログをもっと詳細に表示できないの?

622デフォルトの名無しさん2017/02/08(水) 03:49:23.74ID:6rskJv7R
pyenv, rbenv などの仮想環境は、activate すると、
環境変数PATHを書き換えて、PATHの最初に、仮想ディレクトリを持ってくる奴か?

activateしてないとか、
activateした端末から、atomを起動していないとか

環境変数PATHを書き換えているなら、
実際にどのディレクトリにアクセスしているか、チェックすべし

6236142017/02/08(水) 08:51:27.59ID:x7drFtu9
>>622
gen enviromentでpathを見てみたら
- GEM PATHS:
- C:/Users/ユーザ名/.rbenv-win/versions/2.3.1/lib/ruby/gems/2.3.0
- C:/Users/ユーザ名/.gem/ruby/2.3.0
となっているのですが、.gemの方はspecsのフォルダしかなかったので
存在しないフォルダにpathが通ってるみたいです
この辺の設定を弄ればなんとかなるかもしれないのでちょっとやってみます

6246132017/02/08(水) 23:17:08.08ID:aJ5fQeJs
なんかずっと調べてたけど、.は絶対パスだとかカレントディレクトリの事とかってのは分かったけど
結局railsだけ作成されん
rbenv使ってるからpathが変なことになってるのか
この環境を準備する所で延々と蹴躓く現象は何だ一体

625デフォルトの名無しさん2017/02/09(木) 02:45:49.65ID:9cVHqnIp
pyenv, rbenv の仕組みを理解すべき。
例えば、OS X では、

$ which ruby
/usr/bin/ruby

ここに、システムのRuby1.9があるとすると、
$ ruby
で、Ruby1.9 が起動する

ここで環境変数PATHの先頭に、Ruby2.2を追加すると、
$ ruby
で、Ruby2.2 が起動する

export RBENV_ROOT="/usr/local/rbenv"
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"

$ which ruby
/Users/ユーザー名/.rbenv/shims/ruby

常に、システムのRubyか、仮想のRubyか、どのRubyを使っているのか意識すべき。
また、アプリによっては、そのアプリ内にRubyを含んでいて、それを使うものもあるので要注意。
Railsは、Rails内にRubyを含んでいるのか?

フォルダのパスを指定する際も、絶対パスではなく、
仮想のルートとか、プロジェクトのルートからの相対パスで指定すべき

6266132017/02/09(木) 07:54:29.95ID:qeBroOpz
>>625
ありがとう、解決したわ
環境変数にrbenvで使ってるやつのpathを打ち込んだら動いたわ
すでに設定済みにしてると思ってたら/shimsしか環境変数に入ってなかった
本当にありがとう、俺がただアホだった

627デフォルトの名無しさん2017/02/09(木) 15:15:20.18ID:FNn9chTz
自分がアホということだけは一生忘れるなよ

628デフォルトの名無しさん2017/02/11(土) 19:48:55.00ID:oCse2iaP
みんな最初はアホだったんだよ

629デフォルトの名無しさん2017/02/12(日) 17:47:30.58ID:+uhhqNyl
そして今でも

630デフォルトの名無しさん2017/02/12(日) 20:34:37.44ID:X5nO73Bv
IDEとしてeclipseを使い始めたのですが
入力補完が自動で出てこないのは仕様なのでしょうか?
ctrl+spaceがデフォルトなのですがオートにする方法が分からず……

631デフォルトの名無しさん2017/02/14(火) 02:56:09.57ID:3why3ank
VScodeにしとけ

632デフォルトの名無しさん2017/02/16(木) 00:28:37.88ID:+eyUWXiG
RubyでGUIが発展しなかったのは何故なんでしょうか?
書きやすいのでGUIも作りやすい気がするのですが……

633デフォルトの名無しさん2017/02/16(木) 02:15:25.57ID:t/hw8IzF
>>632
端的に言うとWindowsに向いてないから
まつもとひろゆきは根っからのWindows嫌いで幽冥

634デフォルトの名無しさん2017/02/16(木) 02:17:04.04ID:t/hw8IzF
失礼ゆきひろだな

635デフォルトの名無しさん2017/02/16(木) 02:23:45.59ID:SJI/N2Pk
そもそもRubyはもともとそんなにポピュラーな言語ではない
Railsがバカ売れしたから相対的にWebばかりで使われてるような状態になっただけ
特にGUIでダメってわけじゃなく、Railsを除くとユーザーの母数は極めて少ない

636デフォルトの名無しさん2017/02/16(木) 02:48:11.58ID:Q8D/mNDA
>>635
極めて少ないんじゃなくて、GUIに向いてないだけ
vagrant、chef、fluentd、jekyll など Ruby 製ツールは数多くある

637デフォルトの名無しさん2017/02/16(木) 08:20:46.17ID:AZnxSHxr
GUI アプリを書きたいプログラマってどんぐらいおる?

638デフォルトの名無しさん2017/02/16(木) 08:50:45.54ID:SJI/N2Pk
>>637
スマホもRailsも一種のGUIアプリだよ

639デフォルトの名無しさん2017/02/16(木) 10:39:47.24ID:oINfzL7x
趣味コーダーです。
最近るびまのC より速い Ruby プログラムやブログなどのパフォーマンスを上げるテクニックの記事などを読んで疑問に思うことがあります。
オブジェクト生成コストはパフォーマンスに大きな影響を及ぼすということですが
例えば 等レコード長のテキストデータを解析するときなどでループ内でcaseによる分岐処理をする場合
判定に使っている文字列はオブジェクト生成コストが発生するのでしょうか?

def hoge(s)
ret = case s
when "foo" then 1
when "bar" then 2
....
else 0
return 0
end

640デフォルトの名無しさん2017/02/16(木) 11:11:18.30ID:BmKkG0r5
"foo"に .tap {|x| p x.object_id } でわかりそう。
正解はしらんけど都度 "foo".freeze って書くのもうざいので
気にするなら定数にいれとくのがふつう?

641デフォルトの名無しさん2017/02/16(木) 12:40:21.60ID:Yr9i0JtD
旅行中で手元に環境がないので記憶に頼って適当に書く

スクリプト中のリテラルはコンパイル時にオブジェクトIDが確定する
なので文字列リテラルである限りは毎回生成されているわけではないので気しなくていいというかむしろ
「埋め込み#{}を含まないリテラルで書いたほうがいい」という場合すらもありうる

642デフォルトの名無しさん2017/02/16(木) 13:40:44.90ID:1VBkG9E6
>>632
tkで引っ張り過ぎたんじゃね
使ってる人はこっそり使ってる

643デフォルトの名無しさん2017/02/16(木) 16:18:42.90ID:uedG8QoH
そもそもRubyの立ち位置がGUIの場所を奪い取ろうとしなかったから。
手軽さ気軽さ柔軟さが重視され
GUIで便利に使うというところは取り入れなかった。
頑張った人もいたがその波は複雑すぎて難しすぎて不便すぎて
誰もついていかなかった。

644デフォルトの名無しさん2017/02/16(木) 16:29:09.63ID:fLSXvzzP
>>632
JRuby + JavaFX が現状だとアリな選択肢だと思う。

645デフォルトの名無しさん2017/02/16(木) 18:16:34.50ID:zGnLk6iz
あれは不幸な出会いの結果の事故だったのだ
よくある「便利なRubyで○○操作するライブラリ作ってみました」と同様の
「便利なRubyでGUIツールキットを操作するライブラリ作ってみました」でしかなかったのだが
いつのまにやらどこでやら「簡単なRubyでGUIプログラミングが簡単にできる(ようになる)」ということになってしまったのだ
初心者(を煽る人)の変な期待を背負わされて潰れていったプロジェクトが死屍累々

646デフォルトの名無しさん2017/02/16(木) 20:00:08.69ID:9oOObwwg
>>644
その組み合わせでやってみたいけど全然資料が無くて悲しい
rbenv-winだとそもそもJRubyすらインストール出来ないからなおさら悲しい

647デフォルトの名無しさん2017/02/16(木) 22:36:27.03ID:jc3dpiuS
>>632
> RubyでGUIが発展しなかったのは何故なんでしょうか?

RubyにかぎらずGUIアプリ自体が今の主流じゃない

GUIアプリによく使われるものでもXAMLとか
言語以外でGUIを作る

648デフォルトの名無しさん2017/02/16(木) 23:57:07.19ID:snmxztE6
Haxeのようなトランスレーターでも、Rubyをサポートしていないけど、
AndroidのSL4A(Scripting Layer for Android)は、JRubyをサポートしている

CSSへ変換できる、SASSもRuby製ツール。
DSLの作り安さでは、Groovy, Rubyが圧倒的。
Groovyでは、Gradle が有名

これは、Chef の構文だけど、package とか独自のキーワードをつくれる。
%w{php mysql nginx}.each do |name|
package name do
action :install
end
end

Rubyのライバルに、Groovyを静的にした、Kotlin という言語も出てきた

649デフォルトの名無しさん2017/02/17(金) 00:19:29.00ID:q11e8bmB
KotlinはC#やTypeScriptの系譜だろ
一貫したルールに基づいてシンプルで合理的なコードを書けというタイプの言語
言語がいくら複雑になろうが一貫性がなかろうが手に馴染むならOKという
Ruby系(ScalaとかCoffeeとか)はかなり違う

650デフォルトの名無しさん2017/02/17(金) 00:40:25.20ID:1Ywu3Nja
>>649
誤爆かな…?

それはともかく、立ち位置がまったく逆だと思うぞ
C#やKotlinはともにJavaのシンプルすぎる部分に手を入れて書きやすくしようとしたものなので、
どっちかというと「手に馴染むならOK」を目指してる言語だぞ

651デフォルトの名無しさん2017/02/17(金) 01:37:36.15ID:EzDq9nSn
>>649
× 言語がいくら複雑になろうが一貫性がなかろうが手に馴染むならOKという
○ 言語がシンプルで一貫性があって手に馴染む
それがRuby系(ScalaとかCoffeeとか)だよ

652デフォルトの名無しさん2017/02/17(金) 01:38:27.90ID:EzDq9nSn
>>648
> これは、Chef の構文だけど、package とか独自のキーワードをつくれる。

そのpackageはキーワードじゃなくてただの関数だよ。
あんたRuby知らないんじゃね?

653デフォルトの名無しさん2017/02/17(金) 11:44:07.61ID:9tb0EpUw
それいったら関数じゃなくてメソッドだし
DSLの話ならキーワードって表現してなにが悪いんだか

654デフォルトの名無しさん2017/02/17(金) 17:58:53.60ID:HSZP6Y4k
文字列と数字が混在した文章が入った変数があるのですが、
数字だけを消す方法ってありますか?

例:foo2017uEHngg

655デフォルトの名無しさん2017/02/17(金) 18:02:12.28ID:HSZP6Y4k
あ、ちなみにループで流してて全てに適応したいので、
image = image.sub( /foo2017uEHngg/ , 'foouEHngg')
とかの置換ではなく、単純に数字だけを消せればと思っています。

656デフォルトの名無しさん2017/02/17(金) 18:18:27.20ID:CTqiPbYL
あるよ
delete使いなよ

657デフォルトの名無しさん2017/02/17(金) 18:18:57.11ID:yGnzX63H
ありますよ

658デフォルトの名無しさん2017/02/17(金) 18:35:45.10ID:K+qi4wTI
>>655
置換で(も)いいよ
「何もない文字列」と置換すればいい
irb> 'abc123def'.gsub(/\d/){''}
=> "abcdef"

659デフォルトの名無しさん2017/02/17(金) 18:39:24.01ID:jqlfOnRa
'abc123def'.gsub(/\d/,'')でいいでしょ

660デフォルトの名無しさん2017/02/17(金) 19:33:20.10ID:HSZP6Y4k
645ですがイケました!
大変助かりました。
皆様ありがとうございますm(_ _)m

661デフォルトの名無しさん2017/02/18(土) 02:50:53.61ID:iGUiGFMH
GitHubで「remove password」というコミットを検索するとパスワードらしきものが大量に見つかる
https://security.srad.jp/story/17/02/17/0453215/

662デフォルトの名無しさん2017/02/18(土) 07:24:52.64ID:gP3354JB
わろた

663デフォルトの名無しさん2017/02/18(土) 07:25:33.45ID:gP3354JB
あとどの言語の利用者に馬鹿が多いかもわかるかもしれんな

664デフォルトの名無しさん2017/02/18(土) 23:56:49.78ID:Dj21W5qA
elseif って言語でかなり変わるのがいとおかし

if else だけ C
elseif VBA
elsif ruby
elif phyton

となるとそのうち eif や ef の言語が出てきそう

665デフォルトの名無しさん2017/02/19(日) 15:31:10.84ID:3qLPQcO5
caseがあるならelse-ifはいらんよな
カラム位置ずれるし

666デフォルトの名無しさん2017/02/19(日) 23:50:13.75ID:qdwxJW3o
a = []
2.times do |n|
a[n] = gets.chomp.split(" ")
end

b = a.reverse
puts b

これでプログラムを動かすと
1 2 3
4 5 6

1
2
3
……という形になり
a[n] = gets.chomp似なおすと
4 5 6
1 2 3
という風になるのですが、何故でしょうか
単純に空白区切りにするために.splitをつけたのですが、改行される理由が分からず……

667デフォルトの名無しさん2017/02/20(月) 00:25:48.68ID:csIbwSs4
>>666
それだとsplit有りの方の結果は
4
5
6
1
2
3
になりそうなもんだけどな

668デフォルトの名無しさん2017/02/20(月) 00:36:32.08ID:xJP1+W8M
>>667
申し訳ないです、その通りでした
ただ理想としては
4 5 6
1 2 3
と表示したかったので、要素ごとに改行されるのが気になりました

669デフォルトの名無しさん2017/02/20(月) 00:39:20.78ID:ql4Ji/cb
文章表示のためにp使うな氏ね、という素晴らしい言葉があるのだが
内容確認のためにputs使うな氏ね、というのも同じなのだろうな

>>666
Rubyには文字列や数値なんかを含むオブジェクトの中身を適度にデバッグ便利に表示してくれる p という関数的メソッドがございます
ある時点の文字列や配列なんかがどのような構造になってるかというのは p で表示させることで確認できます
原始的な方法だとか文句はあるんだけども思った通りの構造になっていないことが判明したりするので適宜表示してくだされ

a = []
2.times do |n|
a[n] = gets.chomp.split(" ")
end
p a

んでつまりaは入れ子の配列です
通常、そんなめんどくさいものをputsに直接渡してはいけません(特に初心者は)
配列の要素をeachで取り出す・mapで結合するなどして成形した文字列ひとつを(何度も)putsするようにしてみてください
顧客が本当に必要だったもの:

a = []
2.times{ a << STDIN.gets.split}
puts a.flatten.join(' ')

670デフォルトの名無しさん2017/02/20(月) 00:44:21.53ID:csIbwSs4
結果が自分の予想と大きく違って原因がわからないときは
irbで1行ずつ結果見てくのが良いよ

>>666の場合はたぶんbの内容は予想通りだったんじゃないかな
putsの仕様を自分にとって都合の良い方向に勘違いしてただけで

671デフォルトの名無しさん2017/02/20(月) 00:56:41.06ID:xJP1+W8M
>>669>>670
pメソッドで二つのプログラムを確認したら
gets.chomp.splite
=>[["1", "2", "3"], ["4", "5", "6"]]
gets.chomp
=>["1 2 3", "4 5 6"]
っていう風になってやっと何が起きてるかやっと分かりました
pって使い所が分かりづかったんですが、こういう時にはめちゃくちゃ便利ですね
あとputsとか配列の仕様ももっと勉強しないとダメですね
やっぱりプログラミングはたのしー!

672デフォルトの名無しさん2017/02/20(月) 01:26:31.07ID:mClGTBrk
puts, print は文字列を表示するから、インスタンス.to_s を呼ぶ。
一方、p, pp はデバッグ用だから、オブジェクトの構造もわかる

リテラルなら、% で、そのまま様々な配列にできる

ary = %w(a b c)
p ary
# => ["a", "b", "c"]

673デフォルトの名無しさん2017/02/20(月) 11:21:40.78ID:hEKkgCXk
Rubyって多次元配列の資料ってあんまりないの?

674デフォルトの名無しさん2017/02/20(月) 14:52:09.25ID:z8tMUJw0
Rubyって複雑なことをさせる言語じゃないじゃん?

675デフォルトの名無しさん2017/02/20(月) 14:58:46.95ID:0oYPRVWe
a = []
2.times do |n|
a[n] = gets.chomp.split
end

puts b[0][0] +" "+b[0][1] + " " + b[0][2]
puts b[1][0] +" "+b[1][1] + " " + b[1][2]

何とも言えない気持ち悪さ
もっと楽したい

676デフォルトの名無しさん2017/02/20(月) 16:12:09.27ID:nLOBZbgL
何がしたいのかよくわからんけど
puts b.join(" ")

677デフォルトの名無しさん2017/02/20(月) 16:15:54.79ID:HE07SQGC
どんな糞な解説や教科書を使ってるのかは知らんが
Rubyにおいては配列内容に添字でアクセスするのは最終最後の泥臭い手段
そうならないように作る

678デフォルトの名無しさん2017/02/20(月) 16:38:03.36ID:0oYPRVWe
>>676
上の話見てて
a[n] = gets.chomp.split
=>[["1", "2", "3"], ["4", "5", "6"]]
このネストからそれぞれの配列だけ取り出したいなーって思ったんだわ
理想
=>["1", "2", "3"]
=>["4", "5", "6"]
puts a.join(" ")でやると
=>1 2 3 4 5 6
になるし
p a.flattenしちゃうと
=>["1", "2", "3", "4", "5", "6"]
なんか小回り効かないなーっていう風にふと思っただけ
Rubyで多次元配列あんま使わないから気になってさ

679デフォルトの名無しさん2017/02/20(月) 17:04:29.58ID:36hbH0MI
>>668
$ irb
>> ys = [["1", "2", "3"], ["4", "5", "6"]]
=> [["1", "2", "3"], ["4", "5", "6"]]
>> ys.reverse.each { |xs| puts xs.join(' ') }
4 5 6
1 2 3
=> [["4", "5", "6"], ["1", "2", "3"]]
>>

680デフォルトの名無しさん2017/02/20(月) 17:35:58.62ID:nLOBZbgL
>>678
b=[["1", "2", "3"], ["4", "5", "6"]]
b.each{|a| p a}

681デフォルトの名無しさん2017/02/20(月) 17:57:38.96ID:0oYPRVWe
>>679>>680
eachだ多次元配列で表示していっても
その配列ごとでやってくれるのか、本当に勉強になるわ
リファレンスとか本漁ってもこの辺の挙動が書いて無かったから助かった

682デフォルトの名無しさん2017/02/20(月) 18:32:48.75ID:wmO++6yz
ああそうか、初心者スレだし最初に言うべきだった

>>681
Rubyに多次元配列は存在しない(と、それこそマニュアルに書いてあるはず)
ただのネストした配列でしかない
なのでふつうの配列操作が使える

683デフォルトの名無しさん2017/02/20(月) 21:12:58.62ID:ZSqAwaEi
>>682
あーなるほど
それこそ配列が一つの要素みたいに扱うのね
その辺が何となく曖昧だったけどやっと分かったわ

684デフォルトの名無しさん2017/02/20(月) 23:53:00.90ID:mClGTBrk
動的言語では、多次元配列は無い。
単なるオブジェクトの配列しかない

そのオブジェクトが配列なら、2次元配列のように見えるだけ。
だから、ジャギー配列

685デフォルトの名無しさん2017/02/21(火) 07:50:42.24ID:sM1Q20qs
APLは動的じゃなかったか

686デフォルトの名無しさん2017/02/21(火) 08:33:27.35ID:9la10gsU
Rubyの場合はもっと単純に「多次元配列に見えるものはただのメソッドチェーンの糖衣構文だから」でいいよ
irb> arr = [[11,22,33],[44,55,66]]
irb> p arr[1][2]
66
irb> p arr.[](1).[](2)
66
多次元配列のように見えるオブジェクトarrには[2]の部分の情報が渡っていない
[2]はarr[1]で返るオブジェクトのメソッドでしかない
だから存在しない「番地」を問い合わせたときの挙動がバラバラになる
# arr[5]はnilで、nilには[]メソッドがない
irb> p arr[5][2]
NoMethodError: undefined method `[]' for nil:NilClass
# arr[1]はArrayを返し、Array内に存在しない要素[5]はnilを返す
irb> p arr[1][5]
nil

Rubyのネスト配列を多次元配列だと思った人が全員踏み抜く地雷おまけ
irb> a = Array.new(2, Array.new(2))
irb> p a
[[nil, nil], [nil, nil]]
irb> a[0][1] = 9
irb> p a
[[nil, 9], [nil, 9]]
irb> a = Array.new(2){Array.new(2)} # ブロックを使った正しい"初期化"

687デフォルトの名無しさん2017/02/21(火) 13:04:50.28ID:quEto1j7
配列の要素が配列なのが多次元配列じゃないという意味が解らないんだけど、
1次元配列の番号を2次元に付けかえたのが多次元配列といいたいわけ?

688デフォルトの名無しさん2017/02/21(火) 13:11:28.67ID:quEto1j7
method = obj.method(:hoge)
method.call(arg1, arg2, arg3)
これが出来るからrubyのメソッドはファーストクラスっていうけど
.callっていうのがファーストクラスじゃないのに
なんでmethodがファーストクラスなのかわからない
矛盾してると思う。
call.call.って永遠に続く無限ループじゃないかとおもう。

689デフォルトの名無しさん2017/02/21(火) 14:03:18.59ID:+7ZkBccH
curryでProc返すし、いろいろ目をつむるところは多いね。
同じ結果にできればいいんやろみたいな

690デフォルトの名無しさん2017/02/22(水) 23:43:47.80ID:oa5gpijl
>>688
関数型言語において関数そのものがファーストクラスであることは決定的な特質であり、
対してRubyのメソッドがファーストクラスではないという指摘はまったくそのとおり

それゆえRubyは(純粋オブジェクト指向言語であって)関数型言語ではない、
ただし(lisp由来の伝統的な)関数型プログラミング・スタイルには最適な設計が為されている

691デフォルトの名無しさん2017/02/23(木) 00:00:31.66ID:mXBoTgqP
関数型プログラミングに最適とはとても言えないだろ
Rubyのブロックが式じゃないのは本当に糞
-> { とか関数型信者なら発狂するレベルの醜悪なシンタックス

692デフォルトの名無しさん2017/02/23(木) 01:27:53.73ID:Zu/nS+/A
>>691
>Rubyのブロックが式じゃないのは本当に糞

RubyのブロックはProcオブジェクトの「構文糖」だからね
もしブロックを式(の要素)として扱いたいのなら、lambda { … } と書けばいいだけの話


>-> { とか関数型信者なら発狂するレベルの醜悪なシンタックス

これに関しては同意する

ただでさえ複雑難解なRubyの構文仕様にあえて:
・メソッド Kernel.#lambda の代用として、-> という予約語
・メソッド Proc.call の代用として self[…] という別名(エイリアス)
・メソッド Proc.call の代用として self.(…) という構文
がRuby1.9で追加されたけれど、どれも「実践的な関数型プログラミング」という視点では糞だ
ただし糞を使わなければいいだけで、lambda と call を使うことには何の問題も無い

というか、最適ではないという根拠はこんな2つだけなのかな?
逆に、最適であるという根拠は以下の文書で解説されているんだけどね
・Rubyによる関数型プログラミング
 http://www.h6.dion.ne.jp/~machan/misc/FPwithRuby.html
この文書から引用しとく:
  Rubyは基本的には命令型言語であるけれど、 関数型プログラミングへの
  際立った潜在能力があるのだから、 それらをいつどのように使うか(そして、いつ使わないか)を
  知っておくべきである。

693デフォルトの名無しさん2017/02/23(木) 06:41:51.11ID:V6/XQnA9
>>692
ブロックが式なら lambda もいらないんだよ
ほんとに関数型言語使ったことあるの?

694デフォルトの名無しさん2017/02/23(木) 07:11:05.68ID:YiHBi8SD
>>693
ちゃんと文章を読んだ方が良いよ。

695デフォルトの名無しさん2017/02/23(木) 07:19:43.53ID:V6/XQnA9
>>694
688や691はlambdaやcallを唱えなければならないこと自体が最適でないと言ってるんであって、692は何の反論にもなってないよ
Matzの言葉を借りて言えば、処理系を満足させるためだけの無駄な記述をしなければならないことは「屈辱」

696デフォルトの名無しさん2017/02/23(木) 08:26:20.57ID:adFVqgJc
ブロックが式と申しますかオブジェクトであらねばいけませんことよ。
松本さまがおっしゃりあそばされましたように、ブロックをお二つ以上
お渡ししたいときは、ラムダ式をご使用なされるようにとのことでしたわ。

697デフォルトの名無しさん2017/02/23(木) 09:03:07.13ID:mPCh5pwG
そんなに仕様に不満があるなら自分で言語つくればいいのに。

698デフォルトの名無しさん2017/02/23(木) 09:20:42.04ID:yVxxN/xM
# Swapping Two Numbers
loop do
x, y = gets.split.map(&:to_i)
break if x == 0 && y == 0
if x < y
puts "#{x} #{y}"
else
puts "#{y} #{x}"
end
end

このプログラムでloop doをwhileにすると
Swapping-Two-Numbers.rb:3: syntax error, unexpected ',', expecting keyword_do_cond or ';' or '\n'

x, y = gets.split.map(&:to_i)

というエラーが出るのですが何故なんでしょうか?

699デフォルトの名無しさん2017/02/23(木) 11:26:52.34ID:wDND+Qvv
>>698
勝手に決めつけて勝手なことするな
プログラミング言語は書き方が決められている
ttp://doc.okkez.net/2.1.0/view/spec/control#while

700デフォルトの名無しさん2017/02/23(木) 12:24:42.23ID:yVxxN/xM
>>699
申し訳ないです
ただ
#Print Test Cases
i = 0
while
x = gets.to_i
i += 1
break if x == 0
puts "Case #{i}: #{x}"
end

というプログラムを書いた時は問題なく動いたもので
正直何が違うのか今一分からず……

701デフォルトの名無しさん2017/02/23(木) 13:03:40.22ID:wDND+Qvv
>>700
うん、なんか根本的なところがわかってもらえてなくて悲しいからはっきり言うけど
そのwhileの使い方は「最初から間違っている」
問題なく動いたことなどほんとは一度もないのだ
プログラミング言語は容量用法守って正しい使い方で使うこと
while true
puts 'press Ctrl-C for stop'
end

どうしても回答欲しい人向けに答えるとwhileが制御構造(で、doが省略可能)だったからwhileがexpr求めて行跨いだからだな
while a = 32
p a
end

702デフォルトの名無しさん2017/02/23(木) 13:23:10.87ID:yVxxN/xM
>>701
ありがとうございます
もっとちゃんと勉強します……

703デフォルトの名無しさん2017/02/23(木) 13:28:28.64ID:mPCh5pwG
whileの使い方がわかっていなくても
こんな書き方は知っているんだな。>map(&:to_i)
初めてみたんで調べたわ。

704デフォルトの名無しさん2017/02/23(木) 13:28:53.32ID:ovcPlnjq
loop do <=> while true do
他言語ぽく書けるようにかwhileのdoは省略できる謎仕様だから
700は while (x = gets.to_i) do となれるけど
698は構文解析器の想定外なのでダメ

あと標準入力を順に処理するコードは ARGF.each をつかって
レシーバから畳み掛ける方がrubyぽくて楽かもね

705デフォルトの名無しさん2017/02/23(木) 23:42:15.65ID:Zu/nS+/A
>>693
そんなに lambda とタイプするのが面倒なら、おまじないを唱えればいい

$ irb
>> module Kernel; alias :fn :lambda; end
=> nil
>> succ = fn { |x| x + 1 }
=> #<Proc:0x0000000109aaad98@(irb):2>
>> succ.call 2
=> 3
>>

JavaScript の function や Python の lambda が予約語であるのに対して、
Ruby の lambda は単なるメソッドでしかないから、こんなこともできる

ちなみに fn という単語は、Standard ML(SML) と呼ばれる関数型言語において
ラムダ式を構成するために使う予約語であり、同じML族の OCaml なら fun を使う
上の例ならば、SML だと「val succ = fn x => x + 1」と書く

706デフォルトの名無しさん2017/02/24(金) 00:10:31.93ID:nZ0bXpnn
>>695
まず自分が>>690で「(Rubyは)関数型プログラミング・スタイルには最適」と書いたのは、
いくつかある命令型言語(=手続き型言語)の中で最適という意味だから、勘違いしないよう
関数型言語が関数型プログラミングというスタイルに最適なのは小学生でも分かるよね?

念のため、クイックソートというお題でいくつかの言語について関数型プログラミングを
比較した文書があるから、読んどいて
・関数型プログラミングにおけるクイックソート・アルゴリズムの実装
 http://www.h6.dion.ne.jp/~machan/misc/qsort-in-fp.html

あと、実践的なRubyの関数型プログラミングで、Procオブジェクトを明示的に生成する
lambda や他のオブジェクトを適用する call は、日常的にはまず使わないよ(例外は>>696)
普通はProcオブジェクトの構文糖であるブロックを使う
lambda や call は「処理系を満足させるためだけの無駄な記述」だから、
Matzはブロックという構文をRubyで採用したのではないかと

それでも>>695が lambda と call の存在を問題視したいのなら、具体例で示したほうが説得力があると思う
最後に、2ch初心者みたいだからアドバイスしとくと、アンカーの使い方を勉強したほうがいいね

707デフォルトの名無しさん2017/02/24(金) 05:07:12.96ID:0EY+MEOs
>>705
> Ruby の lambda は単なるメソッドでしかないから、こんなこともできる

こんなことって、それ何かすごいことなの?

708デフォルトの名無しさん2017/02/24(金) 06:28:01.96ID:wGBUe+Mz
メタプログラミングでよく使われる、オープンクラスだろ

オープンクラスとは、既存のクラスを好きな場所で再オープンし、
メソッド修正・追加など、任意の変更を加えられる機能のこと

>module Kernel; alias :fn :lambda; end
モジュールを開いて、別名を付ける

名前が重複した場合とか、関数の内容をカスタマイズして使う場合に、
元の関数を別名にして取っておくとか

709デフォルトの名無しさん2017/02/24(金) 10:10:37.41ID:pC79/nbA
他言語ならなんでもない機能とかブロックがファーストクラスだったら必要のない細工を自慢げに紹介するのかっこわるい

710デフォルトの名無しさん2017/02/24(金) 12:20:03.63ID:GgrUn8v8
map(&:to_s)みたいなのも格好悪いハックだよな
メソッド参照を自然に扱えないのは致命的

711デフォルトの名無しさん2017/02/24(金) 14:51:52.02ID:E7gdlIod
ruby/sdlを入れようとしたら
C:\Users\[ユーザ名]>gem install rubysdl
Temporarily enhancing PATH to include DevKit...
Building native extensions. This could take a while...
ERROR: Error installing rubysdl:
ERROR: Failed to build gem native extension.

current directory: C:/Users/[ユーザ名]/.rbenv-win/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rubysdl-2.2.0
C:/Users/[ユーザ名]/.rbenv-win/versions/2.3.1/bin/ruby.exe -r ./siteconf20170224-10
132-19blm9o.rb extconf.rb
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers.
Check the mkmf.log file for more details. You may need configuration options.

Provided configuration options:(中略)
extconf.rb:8:in ``': No such file or directory - sdl-config --cflags (Errno::ENOENT)
from extconf.rb:8:in `<main>'

extconf failed, exit code 1

Gem files will remain installed in C:/Users/[ユーザ名]/.rbenv-win/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rubysdl-2.2.0 for inspection.
Results logged to C:/Users/[ユーザ名]/.rbenv-win/versions/2.3.1/lib/ruby/gems/2.3.0
/extensions/x86-mingw32/2.3.0/rubysdl-2.2.0/gem_make.out

というエラーが出てインストールが出来ません……
何が書いてあるかもさっぱり分からず
OSはwin7-64bit、rubyのバージョンは2.3.1(32bit)になります

712デフォルトの名無しさん2017/02/24(金) 15:56:35.94ID:lQp9pEy2
READMEには
Ruby/SDL needs Ruby and SDL ...
ってあるけどSDLは導入済み?
導入していてもPATHにsdl-configコマンドが通ってないとか

713デフォルトの名無しさん2017/02/24(金) 16:03:49.21ID:E7gdlIod
>>712
SDL本体のインストール忘れてました……
入れてきます

714デフォルトの名無しさん2017/02/26(日) 18:23:15.61ID:BLcxLJLg
rubyに関する活発なコミュニティってないの?

715デフォルトの名無しさん2017/02/26(日) 18:36:48.06ID:Em0PCsm6
そう聞くってことは英語読めないってことだよね
ないよ

716デフォルトの名無しさん2017/02/26(日) 19:04:27.57ID:EY506Qz0
英語でいいならあるんだけどねえ

717デフォルトの名無しさん2017/02/26(日) 19:27:47.62ID:DnCu8UW+
Railsやってないなら無いな

718デフォルトの名無しさん2017/02/26(日) 23:14:24.04ID:SNAVJ+Hg
多言語経験者向けにさらっとrubyを学べるなるべく薄めの本を探しております
はじめてのrubyがその様な物だと調べていて知りましたが、どうも扱っているバージョンが古い物のようで
新しいバージョンに対応しているそのような本はないでしょうか

719デフォルトの名無しさん2017/02/27(月) 00:04:36.09ID:ADDVNKtI
本なら「たのしいRuby」かな
少し分厚いけど他言語(多言語?)経験者ならパラパラ読める
よくある小さいポケットリファレンスくらいの簡単さ

あとは本じゃないけどオフィシャルのマニュアルとか
https://docs.ruby-lang.org/ja/2.4.0/doc/index.html
https://www.ruby-lang.org/ja/documentation/quickstart/

720デフォルトの名無しさん2017/02/27(月) 00:56:50.54ID:44jB03Ba
他言語出来るような人ならとりあえずEffective Rubyだけ読んどけば済むんじゃないかな

721デフォルトの名無しさん2017/02/27(月) 01:19:05.58ID:NoEcrRje
>>715>>716
やっぱり英語読めなきゃダメか……
もっとrubyの事を知りたいし色々見てみたい

722デフォルトの名無しさん2017/02/27(月) 08:11:17.22ID:HTxl7OoW
たのしいRuby 第5版、2016
すべての言語に応用が効く、入門書

Effective Ruby、2015
バグが起きにくい、安全で効率的なコーディングと、
間違いやすいポイントを解説

プロ必須本

723デフォルトの名無しさん2017/02/28(火) 09:23:30.49ID:6GmkQX7r
現状入門本はたのしいRuby一択
それ以外はバージョンが古い

724デフォルトの名無しさん2017/02/28(火) 11:09:36.41ID:+gLWzVyd
下のプログラムで、定数 HOGE がメソッド bbb からは参照できるのに、aaa からは参照できないのは何故でしょうか。

<pre>
Hoge = Class.new do
const_set(:HOGE, "hoge")

def aaa
return HOGE
end
end

class Hoge
def bbb
return HOGE
end
end

x = Hoge.new

x.bbb
=> "hoge"

x.aaa
NameError: uninitialized constant HOGE
</pre>

725デフォルトの名無しさん2017/02/28(火) 12:25:13.13ID:JvoAWwGi
きゃああ、無名クラスの定義スコープの話だ説明めんどい死ぬ死んでしまう
Class.newやModule.newにブロックを渡して作った場合
- 無名クラス定義内で参照される定数はそのスコープ内でリアルタイムに参照される
という仕様なのだ

HOGE=111
Hoge = Class.new do
const_set(:HOGE, 222)
def aaa; HOGE; end
end
class Hoge
def bbb; HOGE; end
end

p Hoge.new.aaa #=> 111
p Hoge.new.bbb #=> 222

どうしても無名クラス内でその無名クラス内で定義した定数を参照したければself.class::HOGEとするしかないね

726デフォルトの名無しさん2017/02/28(火) 17:55:28.53ID:+gLWzVyd
どうもありがとう。
定数の探索ルールが良く分かってなかったようで。
self.class の論理的な階層構造から、見える定数が決まるのだと思ってたのだけど、そうではなくて、メソッドが定義されたソースコード上の位置で決まるんですね。

727デフォルトの名無しさん2017/03/01(水) 01:17:13.59ID:ElQ6OcG3
驚き溢れる素敵な言語

728デフォルトの名無しさん2017/03/01(水) 08:19:02.05ID:yuocqMDO
Hoge = Class.new do
const_set(:HOGE, "hoge")

def aaa
return HOGE
end
end

Hoge = Class.new do
end

Class.new は動的にクラスを作る構文、メタプログラミング用だろ

だから、return HOGE の所では、最後のendが、まだ閉じていないから、
変数Hogeが存在しないのかも?

729デフォルトの名無しさん2017/03/07(火) 17:50:47.89ID:OR7b+iU3
定数はclassかmoduleの中に入らないと変わらないルールだから
ブロックの中のaaaのHOGEは一番外側を参照するだけだろ。

730デフォルトの名無しさん2017/03/07(火) 18:00:47.74ID:OR7b+iU3
わかりにくいから意味を追加するけど、
classとmoduleキーワードに続く中はフォルダーで
その中にあるファイルが定数と考えることが出来て、ファイルは
ファイルのあるフォルダーからしか見ることができないんだよね。
上の例だとaaaがあるのは一番上のフォルダーでbbbがあるのはHogeの
中のフォルダーだからHOGEは別別のファイルと考えることが出来る

731デフォルトの名無しさん2017/03/07(火) 18:11:00.36ID:OR7b+iU3
ちょっと違ってたから訂正、
実験してみたら上のフォルダーの中のファイルは見えるらしい。
つまり、今いるフォルダーにファイルが無ければ上のフォルダーで探す
ルールみたいだな。

732デフォルトの名無しさん2017/03/07(火) 18:29:53.76ID:OR7b+iU3
Class.newのブロックの中ではselfがHogeにかってに変わることで
まだ存在しないHogeの関数を定義できるんだよな。
本当はブロックの引数がHogeじゃないといけないんだけど、
selfをHogeかえることでaaaの暗黙的にselfが
ついているように出来る仕組みなんだよ。

733デフォルトの名無しさん2017/03/07(火) 22:12:22.93ID:H6yYJeTo
>>724
Hoge = Class.new do

class Hoge

下の方で、class Hoge を定義して、
上の方で、Hoge = Class.new で、Hoge class を、new して、
よく考えたら、このソースコードは滅茶苦茶じゃん

Class.new なんて、たのしいRubyにも、載っていない機能だろ。
メタプログラミング用だろ

734デフォルトの名無しさん2017/03/07(火) 22:30:03.39ID:rThUdk6T
>>733
君は知らんだろがRubyにはオープンクラスという機構があってだな…

735デフォルトの名無しさん2017/03/07(火) 22:32:07.87ID:xCLX0I7r
>>733
Rubyは君が想像してるより複雑でサプライズの多い言語なんだよ
シンプルで一貫性が高いのがお好みならPythonにでも乗り換えたほうが幸せになれる

736デフォルトの名無しさん2017/03/07(火) 22:52:57.44ID:ymginw1j
たぶん書いてる人同じだと思うのだが、知らんことにまで口突っ込まんでいいよ

737デフォルトの名無しさん2017/03/07(火) 23:05:12.91ID:5c7MTUF9
>>735
http://d.hatena.ne.jp/edvakf/20090405/1238885788
たしかに Python の配列操作はシンプルで一貫性があるなあ…(棒

738デフォルトの名無しさん2017/03/08(水) 01:17:49.38ID:sPopLWFS
BetterListという命名の傲慢さよ

739デフォルトの名無しさん2017/03/08(水) 10:58:08.01ID:8YPePj4Q
>>732は間違ってた。答えを聞く前にどこが間違ってるか考えてみよう。
def aaaはdef self.aaaの略では無くてdef aaaは現在のclassにaaaというメソッドを
追加する意味なんだ。
なぜならトップレベルでdefでメソッドを定義すると、そこではselfはmainなのにmainのメソッド
にならなくて、mainのクラスであるObjectのメソッドになるからね。
だからClass.newのブロックの中では勝手に現在のオブジェクトselfも変わるけれど
現在のclassも変わるんだね。

740デフォルトの名無しさん2017/03/08(水) 11:26:12.80ID:8YPePj4Q
また間違ってた。def object.methodの形式のdefはselfがobjectに固定した
メソッドを定義するらしい。レシーバーいらなくてシングルトンメソッドという。

741デフォルトの名無しさん2017/03/08(水) 11:33:55.78ID:8YPePj4Q
レシーバーいらないと言ったのはobject.method全体がメソッド名と考えた場合だから注意な。

742デフォルトの名無しさん2017/03/08(水) 11:37:10.85ID:8YPePj4Q
また間違ってた。selfは変数だからメソッド名はmethodだけだな。
objectはただ一つしかないレシーバーだからシングルトンメソッドって言うんだな。

743デフォルトの名無しさん2017/03/08(水) 12:04:44.96ID:sBKWIXfj
全部訂正ワロタ

744デフォルトの名無しさん2017/03/08(水) 12:08:24.90ID:6nP3yGTy
だからRubyには深入りするなといったのに
そういうのを理解したところでMatzの気分で場当たり的に実装されたバッドノウハウでしかないのよ

745デフォルトの名無しさん2017/03/08(水) 12:12:46.76ID:+WSjdjfj
たぶん書いてる人同じだと思うのだが、知らんことにまで口突っ込まんでいいよ

746デフォルトの名無しさん2017/03/09(木) 00:52:21.47ID:HcCF7edF
後付けでインスタンスにメソッド差し込める
フックがなくとも、既存のメソッド乗っ取って追加処理差し込んで元のを呼び出すの余裕

ええとほらアレしたいんだよ、Rakefileっぽいの……できるでそたしかinstance_eval?
(とか言いながら後で「ruby dsl eval」でググる)

レシーバー……ああうん、知ってるよ、「左」ね(「ruby レシーバー 定義」をgoogleで検索)

あかん、わからんおいMatz出てこい(と言いながらソースを)
くらいの覚え方してる、いいのかなぁこんなんで orz

7477462017/03/09(木) 01:07:21.02ID:HcCF7edF
初心者なんでアレだけど
Net::SSHで、su - 叩いてからコマンドぶっぱしたら、出力がおかしくなるのですよ
コード的にはこういうの

https://ideone.com/lWtaiC

鯖のip、ユーザー名、rootのパスは改変してまする(俺のセキュリティ的な意味で)
なんとかrootの出力だけギって来たいわけだが……俺のアタマじゃわかんねえのであります orz

7487462017/03/09(木) 01:13:30.82ID:HcCF7edF
……見直したらなんかひどい文章になってた気がするので忘れてほしくなってきた orz

749デフォルトの名無しさん2017/03/09(木) 01:26:20.04ID:Op4GVNwD
ポイントを絞って書いてくれ

1行ソースコードを書いて、その出力がこうなっているけど、このように変えたいなど

750デフォルトの名無しさん2017/03/09(木) 02:37:06.62ID:HcCF7edF
頑張って短くしてみたけどこれが限界
https://ideone.com/nMJK8I

どういえばいいのか、Net::SSHでチャンネル張ってsu -した後、
root権限でコマンドを実行したら出力がおかしくなる(root@machine# みたいな文言もくっついてくる)

rootでやったコマンドの出力・エラー出力・戻り値だけ欲しい感じ

751デフォルトの名無しさん2017/03/09(木) 02:40:16.46ID:HcCF7edF
su -c "xxx" で逃げるしかないんかしら orz

752デフォルトの名無しさん2017/03/09(木) 02:43:01.19ID:HcCF7edF
正確にはセッション張って(コネクション確立して?)
各パケごとにchannelというか「このパケは区別してね」みたいな番号つけて区分けをしてるみたいだけど
sshをよく承知してないんでアレ

……tty周りもよくわかってないわけで、初心者にもほどがある俺

753デフォルトの名無しさん2017/03/09(木) 03:15:26.05ID:HcCF7edF
今見直したらtypoしてる、どんだけ必死なんだ俺 orz

あってるかどうかわからんけど

・sshが上げたプロセスが子プロセス(su -)した奴を呼んでる

んだけども

・なんでか知らんが親プロセスと子プロセス(su - 後の奴)のstdin/stdout/stderrが直結されてないというか……

出来てるのが一番リクツ通りの気もする(Shellwords#escapeの誤爆が少ない)んでそうしたいんだけど
正直頭悪い俺じゃわかんねえよって状況

754デフォルトの名無しさん2017/03/09(木) 03:28:51.38ID:HcCF7edF
serverspecのエクステのようにsu -cで逃げるのが妥当か
一晩寝てから考えてみる。手があればラッキーだが、見つからなかったらsu -c か orz

idみりゃわかるだろうからアレだが……スレ汚しすまんかった

755デフォルトの名無しさん2017/03/09(木) 05:25:26.05ID:7IyU8nP5
アスペ帰れよ迷惑だよ

756デフォルトの名無しさん2017/03/09(木) 11:16:19.74ID:gEPLYJR/
コマンドと接続元アドレスを限定したauthorized_keysつくって
su経由せずに直接rootでsshしたほうがまし

757デフォルトの名無しさん2017/03/09(木) 12:58:35.19ID:HcCF7edF
>>755
アスペかどうかはしらんが、できんすぎて深夜にヤケ酒飲んでたのは認める

>>756
そりゃ考えてなかった、すまん

とりあえず帰るよ

758デフォルトの名無しさん2017/03/09(木) 14:28:12.64ID:Op4GVNwD
君のソースコードには、p が1つもない。
まず、すべての行に、「p 変数」と書いて、変数の内容を見る

1. Ruby・OSのコマンドの、どちらに問題があるのか?
Rubyを使わずに、端末からコマンドを実行して、その結果がどのように変わるのか?

2. 君は、リダイレクトを知っているか?
標準入出力・エラーで、標準エラーだけ捨てるとか?

3. まず、ループを使わずに、1回だけ処理して確かめる

まず、問題を切り分けることから、始める。
ループを使うな。
すべての変数を、p しろ

759デフォルトの名無しさん2017/03/09(木) 17:08:07.67ID:RV3LnrPm
特定のコマンドの入出力が欲しいなら、そのコマンド用のチャネルを作ってねって話じゃないの?
作ってないから、全部引っくるめたシェルの出力が返って来てると言う話に聞こえる。
irb や pry で試行錯誤するのをオススメ。

760デフォルトの名無しさん2017/03/09(木) 23:21:24.09ID:HcCF7edF
>>758
Session#listen_toしてPacket(TCPのパケじゃなくてラッパークラスのことだけど)引っこ抜かないと
on_dataのループを切ってストレートに書けそうにない

>>759
そんな感じ
SSHのchannelに「権限昇格要求」なんてのがないので(あるわけないだろうが)
su - すると、まるっと帰ってくる

たぶんAnsibleとかがsudoでごまかしてた理由はそれなのかもしれないとか気づかされますた orz

761デフォルトの名無しさん2017/03/10(金) 05:04:02.17ID:j91K0HTy
ちょるるびま

762デフォルトの名無しさん2017/03/10(金) 16:04:08.04ID:y8xCqliG
>>760
マニュアルにあるようにexecにブロック渡す形にしてみたら?
http://net-ssh.github.io/net-ssh/classes/Net/SSH/Connection/Channel.html

763デフォルトの名無しさん2017/03/10(金) 23:04:00.53ID:M4dTqrpi
Ruby.2.4, Windows 7 ProでOutlookのフォルダからメールの件名やサイズを
出力しようとしていますが途中でエラーが発生してうまくいきません。
試行錯誤の末、どうもサイズを取ろうとするとダメなようです。
ruby -rwin32ole -e "WIN32OLE.connect('Outlook.Application').GetNameSpace('MAPI')
.GetFolders[1].GetFolders[1].Items.each{|m|p m.Size}"
==>メールのサイズが250行弱ほど表示された後に次のエラーが表示される
「同時に開くことができるアイテムの数が、サーバー管理者によって制限されています。
開いているメッセージを閉じるか、作成中のメッセージから添付ファイルや画像を削除してください。」
スクリプトの最後を p m.Subject に変えれば、件名が全件表示されました。
ググったところ、Exchangeサーバには同時オープン可能オブジェクト数250個までの制限があるらしく、
これに引っかかっているような気がしますが、メールオブジェクトはOpenしていませんし、
ブロック内にm.Closeやm.ole_freeなど追加しても変化ありませんでした。
試しにVBScriptで同じことをやると問題なくすべてのメールのサイズが出力できました。
Rubyで全メールのサイズを出力するにはどうしたらよいのでしょうか?

764デフォルトの名無しさん2017/03/10(金) 23:34:36.18ID:8q2Idz6n
「ぶっちゃけvbsでよくね?」はダメだよねえ……
ところで、NameSpaceにGetFoldersってメソッドもプロパティもないんだけど、何か書き間違ってない?
https://msdn.microsoft.com/ja-jp/library/office/ff869848.aspx

C:\Users\normal_user>ruby -rwin32ole -e "WIN32OLE.connect('Outlook.Application').GetNameSpace('MAPI').GetFolders[1].GetFolders[1].Items.each{|m|p m.Size}"
-e:1:in `method_missing': unknown property or method: `GetFolders' (NoMethodError)
HRESULT error code:0x80020006
Unknown name.
from -e:1:in `<main>'

765デフォルトの名無しさん2017/03/11(土) 00:00:20.83ID:qyY4K/ii
>>763
メールの件数が250件溜まってないので検証できたのはここまで、あとわかんね
http://ideone.com/3nNRJp

GC.startしないとエラーになるかも、みたいな記述はRubyist Magazineにあったんで
試してみては? くらい
http://magazine.rubyist.net/?0007-Win32OLE

なお、"あなたのアカウント名" ってのは左ペインに出てる一番上のフォルダね、自身の奴を入れて

あーあと別件の話だけど……上のSSHの件だけどfabricもsudoだった orz
fabricでもうまく行かんかったとFAQで書いてたんで、"su -"でなんかするのはたぶんダメそう

766デフォルトの名無しさん2017/03/11(土) 00:04:12.40ID:qyY4K/ii
また酔っぱらって妄言吐くのもアレだから帰るわね……orz
SSHに負けたとかくっくやしいでもビクンビクン

767デフォルトの名無しさん2017/03/11(土) 00:06:04.57ID:sUFiWX+J
Ruby使ってるだけでもうほとんどRubyと関係ない気が…

768デフォルトの名無しさん2017/03/11(土) 00:09:17.59ID:qyY4K/ii
>>767
ですよねー……済まんかった

769デフォルトの名無しさん2017/03/11(土) 01:12:17.24ID:0/u8d9+h
>>765
おお!ありがとうございます。GC.start来週試してみます!!

>>764
GetFoldersじゃなくてFoldersでしたね。手元に環境がなく虚覚えでした。
ちなみになんでVBScript使わないかというと中国語のメール件名のところで落ちるから。
Rubyならコードページ指定してUTF-8で出せるけどvbsでどうやるかわからん

770デフォルトの名無しさん2017/03/12(日) 20:24:21.66ID:PZr7UUWj
MacOSX 10.9
ruby 2.1.10p492
$ gem -v
2.2.5
imagemagickはインストール済。


近デジダウンローダーを使えるように準備する(ImageMagick、RMagickインストール)
ttp://d.hatena.ne.jp/riocampos+tech/20130423/1366702078

近代デジタルライブラリーツールをインストールしたいです。
エラーをどう対処すればいいか教えて下さい。

$ gem install kindai
ERROR: Could not find a valid gem 'kindai' (>= 0), here is why:
Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=error: certificate verify failed (https://api.rubygems.org/latest_specs.4.8.gz)

$ gem install kindai --source https://github.com/hitode909/kindairb
ERROR: Could not find a valid gem 'kindai' (>= 0), here is why:
Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=error: certificate verify failed (https://api.rubygems.org/latest_specs.4.8.gz)
Unable to download data from https://github.com/hitode909/kindairb/ - bad response Not Found 404 (https://github.com/hitode909/kindairb/latest_specs.4.8.gz)

$sudo gem update --system
ERROR: While executing gem ... (Gem::RemoteFetcher::FetchError)
SSL_connect returned=1 errno=0 state=error

771デフォルトの名無しさん2017/03/12(日) 22:00:11.19ID:T4N3k6YJ

772デフォルトの名無しさん2017/03/13(月) 00:44:08.05ID:ONQKgDZ1
個人的メモ
WindowsでCP932以外を標準出力に出そうとすると例外が発生する場合がある
その場合は
$stdout.binmode
$>.binmode
でいける

773デフォルトの名無しさん2017/03/13(月) 08:24:19.79ID:1hDqBdVd
もやもやする表現だけどまあそれでもいいよ
p で表示したいけど p に変更しにくいという場合は inspect するといいよ
irb> require "open-uri"
irb> puts open("http://www2.2ch.net/ba.gif").read.inspect
"GIF89a<\x00<\x00\x91\x00\x00\xDC\xC0\xA6\xD0\xB3\x9C\xC5\xAD\x99\xB3\x9E\x92!\xF9\x04\x04\x14\x00\xFF\x00...

774デフォルトの名無しさん2017/03/13(月) 08:29:05.54ID:W1YZdZCk
sudo ruby setup.rbでアップデートは出来ました。sslがわかりません。
$ /Users/xxxxxxx/.rbenv/versions/2.1.10/bin/gem -v
2.6.10

$ gem install kindai
ERROR: SSL verification error at depth 2: certificate has expired (10)
ERROR: Certificate /C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA expired at 2014-01-28T12:00:00Z
(中略)
Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=error: certificate verify failed (https://api.rubygems.org/specs.4.8.gz)
ERROR: SSL verification error at depth 2: certificate has expired (10)
ERROR: Certificate /C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA expired at 2014-01-28T12:00:00Z


エラー:OpenSSL::SSL::SSLError SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed - komiyakの通り道
http://d.hatena.ne.jp/komiyak/20130508/1367993536
ここのURLをみると、SSLがダメなような気がします。

wget http://curl.haxx.se/ca/cacert.pem
ダウンロードするpemはこれでOKですか?
.pemファイルの置き場所はどこでしょうか?

775デフォルトの名無しさん2017/03/13(月) 11:58:56.84ID:5AA5l5ef
eclipseでaptanaプラグイン導入したんだけど
.erbが開けない(開いてもエディター真っ白&タブの所も×しか出ない)
ファイルのメタデータ消したり、プラグインの再インストール、クリーンオプションつけて起動など
全部試したけどダメでした

なので諦めて別の総合環境を用意しようと思うのですが
お勧めありますか?

776デフォルトの名無しさん2017/03/13(月) 12:12:07.91ID:W+gruSmy
emacs

777デフォルトの名無しさん2017/03/13(月) 16:55:18.31ID:h57/U2+3
>>774
>>771のリンクを読む

778デフォルトの名無しさん2017/03/13(月) 16:56:17.64ID:h57/U2+3
>>775
vim

Aptana的なのが好きならRubyMine

779デフォルトの名無しさん2017/03/13(月) 22:30:51.79ID:M0tA2HNG
オフラインでプログラミング勉強出来るソフトって無いですか?

780デフォルトの名無しさん2017/03/13(月) 23:43:35.07ID:26MzLCyo
>>775
emacs + gtags + company + ruby-modeでよくね?
ただしemacsは慣れの問題が大きいので無難にいくならRubyMine

>>779
寡聞すぎて申し訳ないが、rubyに関して聞いたことはない
オフライン限定となると例えば英語学習のパッケージソフトのようなものだとは思うのだが

781デフォルトの名無しさん2017/03/14(火) 02:05:32.83ID:vIMzEjCF
>>779
なぜにオフライン?

782デフォルトの名無しさん2017/03/14(火) 02:22:38.90ID:TeWZrBMH
>>777
読み直します。

rubygems-2.6.10フォルダには、
gem install --local C:\rubygems-update-2.6.10.gem
rubygems-update-2.6.10.gemというファイルがなかったのですが、よくわかりません。
それでsetup.rbしたんですがどいうことでしょうか?
こちらはMacなので、cdして、
gem install --local ./rubygems-update-2.6.10.gem
するつもりでいました。

783デフォルトの名無しさん2017/03/14(火) 03:44:56.39ID:vIMzEjCF
>>782
そのリンクの中に証明書のことも書いてる
↓ココ
If this process does not work for you, you can try manually adding the new certificate.

784デフォルトの名無しさん2017/03/14(火) 10:40:26.28ID:vbV/Jpv3
>>779
VM環境造ってLinuxでもなんでも入れればいい

785デフォルトの名無しさん2017/03/14(火) 19:42:19.84ID:uwd0LNx3
Rubyの不正使用やめろ。もう特許取ってある。

7867692017/03/14(火) 21:38:56.63ID:SNKtw/av
GC.start入れたら動いた。>>765に感謝

787デフォルトの名無しさん2017/03/14(火) 21:55:29.07ID:7FbDjFmR
>>773
そういう話じゃない。今回やりたかったのがRubyの標準出力を別のプログラムの標準入力とする実装
そのためにRubyからUTF-16LEで標準出力に書き出したいけど$stdout.write(str.encode("UTF-16LE"))とかやると
エンコードの変換に関する例外が発生する。-E "UTF-16LE"を付けて起動しても効果ないし悩んだ

788デフォルトの名無しさん2017/03/14(火) 22:29:09.72ID:IhBG87ve
普通にutf-8にしてれば、コンソールへの出力はユニコードでやってくれるよ

789デフォルトの名無しさん2017/03/14(火) 23:04:06.33ID:TeWZrBMH
証明書のインストールなんてMacだと誰もやってなさそう。
macとlinuxユーザーの事例を探してみます。rubygemならともかく証明書は自信ないですが、、、

790デフォルトの名無しさん2017/03/14(火) 23:23:04.53ID:fIy9ptuf
Ruby始めて一か月くらいの者です。
Windows10で動く使いやすいエディタって何がありますか?
今はvim使ってます。良いIDEがあったらそれも教えてくれると嬉しいです。

791デフォルトの名無しさん2017/03/14(火) 23:28:35.65ID:XiWkowBn
Emacs

Matzが使ってるんだから間違いない

792デフォルトの名無しさん2017/03/14(火) 23:33:15.74ID:TeWZrBMH
>>790
LinuxやMacなら、nvim軽いですよ。windowsだとインストールできるのかは、よくわかりませんが。

793デフォルトの名無しさん2017/03/14(火) 23:53:43.68ID:TeWZrBMH
neovimね。ごめん。

794デフォルトの名無しさん2017/03/15(水) 02:24:50.50ID:7a+pvu8e
>>790
RubyにIDEは必要ない

VScode (無料 マイクロソフト社製でオススメ プラグインで実行も可能)
Atom (無料 プラグインで実行も可能)
Sublime Text(有料(ゆるめ)プラグインで実行も可能)
RubyMotion(有料 高額(年2万円 次の年から半額)だがRubyに機能が特化)


金が余っているならRubyMotion
無料で使いたいならVScode

795デフォルトの名無しさん2017/03/15(水) 02:28:22.29ID:7a+pvu8e
Linuxで動かすとかでもない限りvimなど今の時代は拷問でしかない。
vim Emacsが良いというのは20年ぐらい前からの懐古厨
今から始めるのは地獄だ

796デフォルトの名無しさん2017/03/15(水) 04:14:18.91ID:FiGu7lnE
RubyMineの間違いでしょ
RubyMotionはIDEでもエディタでもないよ

あとvimやEmacsを理解せずにディスってると
レベル低い人だなって思われるからやめたほうがいいよ

7977902017/03/15(水) 07:24:01.81ID:29+QDQGr
ありがとうございます。
教えてもらったの調べてみます。
わからないことがあったらまた聞きに来ます。

798デフォルトの名無しさん2017/03/15(水) 08:08:28.82ID:ivuMTyd+
vi文化圏のサポートなしにvim系列を使うのはエディタそのものの修行だと思う
それこそ超機能エディタとしてはせいぜいEmacs程度でよろしいのではないですかね

799デフォルトの名無しさん2017/03/15(水) 09:16:38.88ID:LExN6Gy2
emacsもvimも両方使ってるけど難しさは同じだよ。

8007952017/03/15(水) 09:24:35.18ID:7a+pvu8e
>>796
理解した上での大ディスりでーすwww

801デフォルトの名無しさん2017/03/15(水) 09:27:20.73ID:7a+pvu8e
前提でOSがウィンドウズ10と書いてあるし
自分もOSがLinuxでない限りと書いておいた
キチンと読んだ?
ちなみにMacOSはLinuxの仲間です

802デフォルトの名無しさん2017/03/15(水) 09:33:12.05ID:LExN6Gy2
俺はvimをwindowsで使ったことないけどどんな拷問が待ち受けてるんだ?
windowsでemacsは快適に動いているから想像がつかないんだけど。

803デフォルトの名無しさん2017/03/15(水) 09:35:02.16ID:7a+pvu8e
訂正
RubyMine Ruby、Ruby on Rails用の統合開発環境。年あたり2万円継続利用で割引あり
RubyMotion iOS, OS X アプリケーションを Ruby で開発することが出来るツール集

804デフォルトの名無しさん2017/03/15(水) 09:48:08.27ID:7a+pvu8e
まずVimやEmacsを使うと
Vim派とEmacs派の宗教戦争に巻き込まれる。

805デフォルトの名無しさん2017/03/15(水) 09:55:12.29ID:7a+pvu8e
プラグイン管理するのに疲れる
バージョンアップ時で動かなくなるとか当たり前
でも懐古厨のかたがたはそれが楽しいと言い張ります

設定だけで1日が潰れる
なんやかんやと自分好みのエディタに育てるのに
細かい設定が必要です
そんな細かい設定をするだけで1日が簡単に潰れます
さらに凝るとトータルで1週間はきえます。

806デフォルトの名無しさん2017/03/15(水) 09:57:23.49ID:7a+pvu8e
見ていろよ?
これからゼッテーウザイ反論が来るからな。

807デフォルトの名無しさん2017/03/15(水) 10:20:44.62ID:LExN6Gy2
プラグイン管理ツール使えば簡単なだけど、
vimもemacsも初期設定のまま使いやすいし、
初期設定で文字の色も変わるし、
難しいことは一つも無いだろ。

808デフォルトの名無しさん2017/03/15(水) 11:33:41.40ID:7ejgHr5h
ID(が同じであること)は嘘をつかないねえ

809デフォルトの名無しさん2017/03/15(水) 14:47:55.27ID:14AAxgXM
初心者ならSublimeText3でいいじゃな〜い

810デフォルトの名無しさん2017/03/15(水) 15:56:24.87ID:LExN6Gy2
金持ちならね

811デフォルトの名無しさん2017/03/15(水) 16:06:08.58ID:FiGu7lnE
>>800
そう、理解してると思ってたんだね
まあがんばってね

812デフォルトの名無しさん2017/03/15(水) 17:29:20.54ID:7a+pvu8e
>>811
ほらな 直接文句を言わないで
お前はわかってない でも俺は分かってるみたいな
うざい反論きただろwww

813デフォルトの名無しさん2017/03/15(水) 19:44:15.75ID:I3jOPMQC
visual studio codeでrubyのデバッグできるようにする所までは出来たが、visual studio codeの使い方自体がよく理解できない

814デフォルトの名無しさん2017/03/15(水) 22:13:52.57ID:PJ2PEyAJ
こういうおかしなアンチが沸くということは、それだけ人気があるということだね

815デフォルトの名無しさん2017/03/17(金) 13:18:27.19ID:v2q/v/ih
Ruby on Railsの参考書を探しているのですが、Ruby2.3、RoR5が出ている現在、RoR4の本だと参考にならないでしょうか?
他言語の本を買った時にサンプルが動かない事があって、原因を調べて見たらコードで使われている関数が最新バージョンで廃止されていたことがありました…
RoR5とRoR4に大きな差がなければ選ぶ参考書に幅が出来るので、教えていただきたいです

816デフォルトの名無しさん2017/03/17(金) 13:24:50.86ID:ol/nseXL
それも自分で判断できるようになって一人前

817デフォルトの名無しさん2017/03/17(金) 14:44:25.24ID:WXrRqPqu
>>815
RoRは絶妙に板違いなのであんまり期待しないでくれ

そもそも動かしたい実環境でRoR5が動作可能なのか、そもそもバージョン選べるのか(固定だったりしないか)というとこから調べないといかんよ
俺ならRoR4で環境自力で固定してRoR4を勉強してそれなりの練度になったら5に手を出すっていうようにするかな

818デフォルトの名無しさん2017/03/17(金) 16:53:30.74ID:s/x5RoqH
プログラミング何からやろうと思って最初cの世界に入ろうと思ったけど、rubyの方が簡単でやってて楽しいわ
でも最初に作るプログラムがコンピュータ将棋ってキツイかな?

819デフォルトの名無しさん2017/03/17(金) 23:52:09.50ID:v2q/v/ih
>>817
RoRは板違いだったんですね、失礼しました。いろいろ調べてみます。ありがとうございました

820デフォルトの名無しさん2017/03/18(土) 02:06:24.72ID:y7G0AfaN
Railsスレはこっちだな
【RoR】Ruby on Rails Part20©2ch.net
http://tamae.2ch.net/test/read.cgi/php/1474523013/

多分専門スレの方が詳しい

821デフォルトの名無しさん2017/03/18(土) 17:18:44.82ID:y7G0AfaN
CUIベースで育成シミュレーションゲーム作り始めたけど楽しいな
ここからGUIベースに持って行くのが大変だけど
dxrubyとかruby/tkとか考えてたけど、いっそRoRで無理矢理実装した方が良いのかな

822デフォルトの名無しさん2017/03/18(土) 17:42:47.26ID:6cW+qOXP
RoRで進めて、表現力に限界を感じたら必要に応じてJavaScriptに移していけばいいんじゃない?
誰も使ってないツールは覚えるのも大変だし覚えたところで価値ないよ

823デフォルトの名無しさん2017/03/18(土) 17:47:31.86ID:y7G0AfaN
>>822
了解、RoRの方が資料も多いしやってみるわ
まだテキストベースだしRoRの機能だけでも充分できるはず
簡単な画像を出す程度ならRoRの方が簡単に出来るっぽいし
何か凄いできる気がしてきたぞ、頑張ろう

824デフォルトの名無しさん2017/03/19(日) 03:05:59.90ID:MM3vmS8Q
>>815-817
改訂3版 基礎 Ruby on Rails、黒田努・佐藤和人、2015

この本が最も簡単。
Rails5への変更点は、webで調べる

825デフォルトの名無しさん2017/03/19(日) 18:01:07.25ID:Ixhubo3y
ハッシュ同士の数字を同時に合計する方法ってありますか?

status = { 'hp' => 100,'mp' => 20,}
training = { 'hp' => 15,'mp' => 20,}
これを合計して
status = { 'hp' => 115,'mp' => 40,}っていう風にしたいです

status['hp'] += training['hp']
status['mp'] += training['mp']
これでも一応出来るのですが、ステータスの項目が増えた時に厄介になりそうだったので……
なんか良い感じにすっとまとめられると嬉しいです

826デフォルトの名無しさん2017/03/19(日) 18:26:21.77ID:2SWTCnbx
irb(main):001:0> status = { 'hp' => 100,'mp' => 20,}
=> {"hp"=>100, "mp"=>20}
irb(main):002:0> training = { 'hp' => 15,'mp' => 20,}
=> {"hp"=>15, "mp"=>20}
irb(main):003:0> [status, training]
=> [{"hp"=>100, "mp"=>20}, {"hp"=>15, "mp"=>20}]
irb(main):004:0> [status, training].map.with_object({}){|x,o| x.each{|k,v| o[k]=(o[k] or 0)+v}}
=> {"hp"=>115, "mp"=>40}

827デフォルトの名無しさん2017/03/19(日) 18:26:50.22ID:/GixBrkM
プログラミングはとりあえずは魔法ではないのでとりあえず現時点では「すっと」まとめようとすんな
なんか長くても坭臭そうでもとりあえず動くやつを目指すのがいい(カッコよくするのはそのあとでいい)
んでRubyにはイテレーションと呼ばれる機能がある
配列をeachするやつと言えばわかってもらえるだろうか
Rubyでデータをなんとかしたいと考えた場合はとりあえず配列やハッシュをeach(の仲間)でぐるぐるできないかをまず考える

def powerup(orig, add)
add.each_key do |name|
if orig.has_key? name then
orig[name] = orig[name] + add[name]
else
raise "orig has no key: #{name}"
end
end
end

orig1 = {'hp' => 100, 'mp' => 50, 'str' => 35, 'dex' => 20}
add1 = {'hp' => 10, 'mp' => 5, 'str' => 4, 'dex' => 2}
powerup(orig1, add1)
p orig1
orig2 = {'hp' => 100, 'mp' => 50, 'str' => 35, 'dex' => 20}
add2 = {'hp' => 10, 'mp' => 5, 'str' => 4, 'int' => 4}
powerup(orig2, add2)
p orig2

実行結果:
>ruby tesuto.rb
{"hp"=>110, "mp"=>55, "str"=>39, "dex"=>22}
tesuto.rb:6:in `block in powerup': orig has no key: int (RuntimeError)

このメソッドは引数内容を書き換えてて気持ち悪いんだけどそのへんの処遇は任すよ

828デフォルトの名無しさん2017/03/19(日) 18:33:22.87ID:Ixhubo3y
>>827
eachを作って繰り返せば良かったのか
メソッドもまだ全然作れてなかったけど、こういうのを見ると作った方が
良い感じにまとまるのがよく分かりました
参考にしていっちょ頑張ってみます

829デフォルトの名無しさん2017/03/19(日) 18:41:48.96ID:Ixhubo3y
>>826
こっちも参考になりました、ありがとうです
もうちょっとeachとかイテレーションについて勉強します

830デフォルトの名無しさん2017/03/19(日) 20:06:43.66ID:9p9UL1lk
Hashのキーの並びが同一な前提なら
status.zip(training).map {|s, t| [s[0], s[1] + t[1]] }.to_h

動かしてないから構文エラーあったら適当になおしてください

831デフォルトの名無しさん2017/03/19(日) 20:18:01.11ID:bf5e5QFj
初心者スレはてめえのコードゴルフスレじゃねえって昔から言われてるだろ

832デフォルトの名無しさん2017/03/19(日) 22:42:11.93ID:PzBVy4ls
inject厨が書いてみた
 http://ideone.com/vuAQat

>>831
初心者スレに限らず、各自が最良と考えるコードを自由にカキコすればいいのでは
その寛容性が Ruby の特質ではないかと思われ

そもそも昔から「論よりコード」が Ruby だから

833デフォルトの名無しさん2017/03/19(日) 22:51:27.15ID:FcfIq+bG
将棋ソフト作ってたらcase文まみれになってしまった
便利なんだよなぁ・・・

834デフォルトの名無しさん2017/03/19(日) 23:04:32.00ID:MM3vmS8Q
>>825
status, training は、DBのレコードのように、同じ構造だろ

class, struct に定義して、インスタンスを作ればいい

835デフォルトの名無しさん2017/03/20(月) 01:08:33.30ID:rg36xICz
>>825
p [status, training].map(&:to_a).flatten(1).inject(Hash.new(0)) {|h,(k,v)| h[k] += v; h}
p [status, training].map(&:to_a).flatten(1).inject({}) {|h,(k,v)| h[k] = v + (h[k] || 0); h}

836デフォルトの名無しさん2017/03/20(月) 07:01:02.68ID:Lni7W/zQ
>>832
>>835
関数型っぽいコードを書くならブロック内で副作用はNG
意識高い系気取りたいなら頭に留めといたほうがいい

8378322017/03/20(月) 09:54:59.69ID:Ia6BH4Hf
>>836
>>832 では意識的に副作用の無い、いわゆる関数型プログラミングと
呼ばれるスタイルでコードを書いたつもりだったから驚いた
では、>>832 のどこで副作用が生じているか具体的に指摘を願う

838デフォルトの名無しさん2017/03/20(月) 10:06:26.39ID:RgF3Qd7a
>>837
よく見てなかったわ
失礼した

839デフォルトの名無しさん2017/03/20(月) 10:41:05.35ID:37uth8Sm
>>825
merge にブロック渡す

840デフォルトの名無しさん2017/03/21(火) 00:51:21.09ID:kYeHwX6T
>>825
ワンライナーにこだわるなら inject がベターだけど
パッとみわかりづらいかも(初期値に足し込むメソッドをサポートしてる言語はあまりない)

ハッシュも増えるしkeyも増える、けれども可読性取る、みたいなのならザックリこんくらい?

http://ideone.com/hbBxJg

841デフォルトの名無しさん2017/03/21(火) 01:16:54.22ID:kYeHwX6T
>>833
……きこえますか……>>833……ID:kYeHwX6Tです……
今……あなたの……心に直接呼びかけています……
https://docs.ruby-lang.org/ja/latest/class/Method.html を見るのです……
関数テーブルを使えばどんだけ条件を増やしてもすっきりすると思うです……

842デフォルトの名無しさん2017/03/21(火) 01:29:52.83ID:kYeHwX6T
>>840見直したが、ワンライナーのほうがよかったんだろうか

ちょっとstatusを基準にresultハッシュにキーと初期値0を植えこみ、あとはresultに植え込んだキーで
全てのハッシュをナメるのは泥臭いってかカッコ悪い気がしてきた

843デフォルトの名無しさん2017/03/21(火) 01:39:36.31ID:U/FngKJK
>>841
はぁ・・・はぁ・・・クラスの使い方もわからない俺には何書いてるかさっぱりわからない・・・
理解出来るように努めますありがとうございます

844デフォルトの名無しさん2017/03/21(火) 01:44:51.99ID:kYeHwX6T
>>843
ザックリいってしまうと……

[
  [値がxxxなら, xxxメソッドをcallします]
  [値がyyyなら, yyyメソッドをcallします]
  #あとは好きなだけメソッドを追加するのです……
]

って配列が作れるのです……case文のような長々がなくなるのです……

845デフォルトの名無しさん2017/03/21(火) 05:48:32.69ID:08F14n66
>>844
なるほど、わかりませんね・・・
ごめんなさい、分かるまでROMります
ありがとうございました・・・

846デフォルトの名無しさん2017/03/21(火) 07:35:21.10ID:0zsWCCNl
教条主義に走らず本質を見よう。
一般にプログラムで明示的な多分岐が好ましくないとされるのは、分岐先を追加・削除したら
ソースコード上離れた場所にある分岐条件の部分もあわせて弄らないといけないため。
>>844みたいにマッピングを手書きするんなら結局その問題の解決にはならない。
hoge_条件 みたいなメソッド名のルールを決めておくとか、明示的なマッピングを避けるやり方は工夫次第で色々あるが
まずは上記の問題が本当に自分にとって問題になっているのかどうかを検討した方がいい。
よほど分岐先が多くて条件が頻繁に変更されるような場合でない限りは
複雑さを持ち込むのに見合った利益はない。

847デフォルトの名無しさん2017/03/21(火) 12:50:38.21ID:4yqL1pKD
こんなのメンテとか出来ないから
大量のcase文で書いてもらったほうが正義だよ。

848デフォルトの名無しさん2017/03/21(火) 12:59:49.18ID:noGMvElA
初心者スレなんだから脱初心者のへんの人がいるのは当たり前だろーが
なんでもかんでもまとめる人
メタプログラミング大正義な人
それ自体が悪いなんてことは言わんが他人に勧めるものではないわな

849デフォルトの名無しさん2017/03/21(火) 16:57:10.24ID:s3sHu6KL
ruby入門者です。
win7-64bitです。
http://jiji.unageanu.net/
これを試してみたくて、
http://rubyinstaller.org/downloads/archives
ここから、Ruby 1.8.7-p374をインストールしました。
コマンドプロンプトで、>irb
irb(main):001:0>
となりました。

> バージョン1.3.3以降
> ※ActiveScriptRubyには標準で添付されていますが、バージョンが古いようなので以下の操作を別途実行しておく必要があります。 $ gem install rubygems-update
> $ update_rubygems
> $ gem install rake
> $ gem install rspec
> $ gem install cucumber
> $ gem install hoe
と書いてあるので、

irb(main):002:0> $ update_rubygems

と打つと↓になってしまいます。 どうすればいいでしょうか?

SyntaxError: compile error
(irb):2: syntax error, unexpected $undefined
$ update_rubygems
^
from (irb):2
from :0
irb(main):003:0>

850デフォルトの名無しさん2017/03/21(火) 17:08:50.75ID:9aUURWE3
>>849
結論だけ言えばコマンドプロントでirbを入れる必要がない
https://www.ruby-lang.org/ja/documentation/quickstart/
irbはその場でrubyのコマンドを試せるモードみたいなもの
だからその状態だとgemコマンドが使えない

update_rubygemsがしたいならコマンドプロント開いてすぐの状態で打ち込まば良い

851デフォルトの名無しさん2017/03/21(火) 17:09:10.71ID:jV0Y+t/Y
rubyの中で実行するものとシェルで実行するものを区別しよう
それから$はプロンプトだから打ち込まないで

852デフォルトの名無しさん2017/03/21(火) 20:25:07.08ID:wMSmjxpw
シェル・コマンドプロンプト・端末は、自分が入力したコマンドを、OSが実行するもの。
Rubyとは無関係

irbは既に、irbというアプリを実行していて、そのアプリ内で、何か処理を行っているだけ

まずOSと、単なるアプリである、Rubyを区別すること

853デフォルトの名無しさん2017/03/22(水) 01:30:39.56ID:+sTx0NJt
>>849
Rubyでシステムトレードの本があるが
中はしっかりしているらしいからよくオススメ本になっているよ

854デフォルトの名無しさん2017/03/22(水) 02:55:17.38ID:LmLHyM9x
>>847
まぁ関数テーブルは基本、caseが10とか20とか100とか200になるのが
予想できるのでもなければ使わんからな……

例: ショボいインタープリタ書いてるとか、将棋で条件が20だか以上までぶっとんだか

855デフォルトの名無しさん2017/03/22(水) 05:24:24.80ID:Lizg5cCe
メソッド作って使える:何となく分かる
でもクラスがよく分からん……
例見てもどういう場面で活躍するのか今一想像できない

856デフォルトの名無しさん2017/03/22(水) 06:11:33.61ID:G9O6oaJL
わからんのならまだ使わなくていい
というか、使ってはいけない
どうせ外部に出すプログラムではないのだろう

857デフォルトの名無しさん2017/03/22(水) 06:33:48.23ID:z6uoiSzy
>>855
オブジェクト指向は原理主義者を恐れずにいえば
手続き型言語において、こういう風にプログラムを構成すればうまくいく、という経験則を
パターンとして言語に取り込んだものなので、実際うまくいかないことを経験しないと有難味を理解するのは難しいかも
グローバル変数や引数が激増して破綻してから、
オブジェクト指向を使うことでなぜ破綻しにくくなるのかという観点で他の人のコードを見て学ぶのが一番いいと思うよ

8588492017/03/22(水) 08:39:02.52ID:3MOry1VM
>>850-853
レスありがとうございます。
でも、なんだか理解出来ません。

>それから$はプロンプトだから打ち込まないで
この情報が役に立ちました。 ありがとうございます。

で、また教えて欲しいのですが、
1、「gemはrubyをインストールすることによって使用可能になるのコマンドだ」でいいでしょうか?
2、rubyをインストール後、外部から持ってきたソースを実行するには、そのファイルをドコに置き、何というファイルをクリックすればいいのでしょうか?

8598492017/03/22(水) 08:59:50.83ID:3MOry1VM
ああ、つまり、
「.rbファイルをクリックすると、そのプログラムが実行される」
で、いいのでしょうか?

8608492017/03/22(水) 09:10:18.02ID:3MOry1VM
jiji setting や jiji start というコマンドがあるのですが、
これって、jijiフォルダの中に、
settingファイルや startファイルがある、ではないのでしょうか?

8618492017/03/22(水) 09:19:20.23ID:3MOry1VM
コマンドプロンプトから、jiji setting や jiji startという命令が来た場合、
その命令を解釈実行するファイルがどこかにありそうな気がするのですが、そんなファイルはないでしょうか?

862デフォルトの名無しさん2017/03/22(水) 15:05:32.68ID:mdyqPZUS
>>849
ちらっとそのページ見たけど、内容が古すぎる。
今時、1.8.7の環境(それもWindows)で、うまく動くかどうかわからんぞ。

ソースが公開されているが、7,8年前に開発が終わってる。
https://github.com/unageanu/jiji/tree/master


素直にこれにしとけよ。
http://jiji2.unageanu.net/

863デフォルトの名無しさん2017/03/22(水) 15:58:41.20ID:vhfzvoEm
>>858
1.「gemはrubyをインストールすることによって使用可能になるのコマンドだ」
-->はいそうです
gemはパッケージマネージャでパッケージ化されたrubyのプログラムのインストール等に使う
またパッケージ化されたrubyのプログラムのことをgemと呼ぶこともある

2. rubyをインストール後、外部から持ってきたソースを実行するには…
-->物による
コマンドラインツールの場合、例えばrakeならgem install rakeが完了すればコマンドプロンプトからrakeと叩けば動く
rubyのプログラムの中で使うためのライブラリの場合は動かない
jiji settingやjiji startというコマンドはjijiというコマンドラインツールがあってsettingやstartはそのサブコマンド
サブコマンド別に.rbファイルを作ってることもあればそうでないこともあるのでソースを見たければまずjijiの中身を見る

3.「.rbファイルをクリックすると、そのプログラムが実行される」
.rbファイルはrubyのソースコードが書いてるファイルなので、ruby some.rb と叩いてrubyに読み込ませれば実行できる
ファイル内にrubyで実行することを明示した記述がありファイルの実行権限が付与されていてそのファイルにパスが通っていれば
some.rbと叩くだけで実行可能
(gemやrakeはgem.rbやrake.rbではなくgemやrakeというファイル名になのでgemとかrakeとか叩くと実行される)


アプリじゃなくrubyでやりたいならgemについての記述のあるrubyの入門書を一冊買って読むのを勧める

864デフォルトの名無しさん2017/03/23(木) 01:03:11.46ID:1ihf95/e
文字列からブロックを作り出すにはどうしたら良いのでしょうか?

具台的はhashのsort_byに渡す処理を文字列として記載して、それを実行するイメージです

hash_val={'a'=>1,'b'=>2}
block_str='|k,v|v'

でhash_val.sort_by()をblock_strを使って行う方法を知りたいです。

これを行う関数を作るのが最終的にしたいことです

functin(hash_val,block_str)で返り値はsort_byの結果をつくるにはどうしたら良いかというものです

865デフォルトの名無しさん2017/03/23(木) 01:13:31.16ID:iwKD8Hm6
>>864
Kernel#eval あたりかなあ
ごめんいま酒入ってるから検証不能 orzA: [0.092736 sec.]B: [1.168932 sec.]

866デフォルトの名無しさん2017/03/23(木) 01:14:19.71ID:iwKD8Hm6
うーん、この A:[xxxx sec]B: [xxxx sec]は酔っぱらって連投したら出るんかね、めんどいな →A: [0.093431 sec.]B: [0.461032 sec.]

867デフォルトの名無しさん2017/03/23(木) 01:16:56.31ID:uMFW1qqt
prc = eval "proc { #{block_str} }"
hash_val.sort_by(&prc)A: [0.092548 sec.]B: [1.168777 sec.]

868デフォルトの名無しさん2017/03/23(木) 01:24:45.12ID:mxf1LURC
evalだね
sort関数を文字列で定義したいケースってどういう時なのか興味あるA: [0.091699 sec.]B: [0.456793 sec.]

869デフォルトの名無しさん2017/03/23(木) 01:25:50.41ID:mxf1LURC
なにこれはじめて→A: [0.092033 sec.]B: [0.456231 sec.]

870デフォルトの名無しさん2017/03/23(木) 01:40:50.46ID:iwKD8Hm6
てすと

871デフォルトの名無しさん2017/03/23(木) 01:42:01.69ID:iwKD8Hm6
あー、中の人がリアルタイムでイジってて、なんかシクったんだろう
気づいて直したんだからセーフでそ

世界を全部コントロールできるなんてのは幻想なんだろうや、俺はもうあきらめてるよ

872デフォルトの名無しさん2017/03/23(木) 02:27:22.99ID:RevR4EA/
この本を読む。
メタプログラミング Ruby 第2版、2015

メタプログラミングRuby イディオム・黒魔術一覧
http://tbpgr.hatenablog.com/entry/20130613/1371143345

define_method とか、
クリーンルーム・コンテキスト探査機は、instance_eval

リフレクション
eval、instance_eval、class_eval

873デフォルトの名無しさん2017/03/23(木) 02:47:04.81ID:iwKD8Hm6
>>872
instance_evalは個人的にすげぇ好きなんだけど、普通あんま使わねぇと思う
ゴーストメソッド並みに
何のDSLなんだよ状態というか、Rakefile二号というか…… orz
わりとサパっと書けてしまうのがrubyの利便性よね

874デフォルトの名無しさん2017/03/23(木) 02:55:21.14ID:iwKD8Hm6
先先日のSSHの件はとりあえずなんとかしますた。

SSH多段接続に使うProxyComand/ProxyJump(Net::SSH 4.1.0でサポート)は無理
俺が使いたい機能の範囲を超えた
ProxyJumpって鍵認証サポートしとるんすか? とか、全部に同じ鍵撒かんとダメぽくね? とか
考えるのがつらくなってきたよ……

やってみるとSSHは奥深し。俺ぁここらで撤退するお。

875デフォルトの名無しさん2017/03/23(木) 08:23:28.11ID:cbUpLCW6
>>872
その本英語版だけど読んだよ。
スペルって書いてあったけど日本語だと黒魔術って言うんだな。

8768492017/03/23(木) 08:44:39.65ID:uU/dK4ok
>>862-863
ありがとうございます。
とりあえず『Rubyではじめるシステムトレード』を見てみます。

8778492017/03/23(木) 11:32:13.65ID:uU/dK4ok
http://uxmilk.jp/22830
ここを参考にして、
require 'open-uri'
url, filename = "http://2ch.net/","111.txt"

open(url) do |file|
open(filename, "w+b") do |out|
out.write(file.read)
end
end
を、
test1.rb
というファイルに書きました。

test1.rbをaaaaフォルダに置き、ダブルクリックしました。
一瞬、コマンドプロンプトが立ち上がりすぐに消えてしまうだけで、
aaaaフォルダに111.txtがあらわれませんません。
ドコが悪いのでしょうか?

878デフォルトの名無しさん2017/03/23(木) 12:10:49.06ID:cbUpLCW6
url, filename = "http://2ch.net/";,"111.txt"
ここが変

8798492017/03/23(木) 12:22:18.71ID:uU/dK4ok
>>878
レスありがとうございます。↓でもダメでした。

url = "http://2ch.net/"
filename = "111.txt"

880デフォルトの名無しさん2017/03/23(木) 12:26:14.46ID:cbUpLCW6
>>879
俺の環境ではそれでうごいたよ。
エラーを見たいならコマンドプロンプトだけで立ち上げて
test1.rbを実行してみるといいよ。
windowsならtest1.rbのあるフォルダから、ファイル→コマンドプロンプトを開く→コマンドプロンプトを開くを
メニューから選ぶといいよ

881デフォルトの名無しさん2017/03/23(木) 12:30:59.47ID:1UBjMcMh
>>877
そりゃOS側の問題だ
コマンドプロンプトから実行してそして終了したら
同時にウィンドウも閉じる仕様だから

8828492017/03/23(木) 12:50:27.09ID:uU/dK4ok
>>880-881
ありがとうございます。
私の環境でも出来ました。
test1.rbファイルを置いたフォルダ名を
'open-uri'としたのがいけなかったみたいですw
open-uriとしたら正常に動きました。

883デフォルトの名無しさん2017/03/23(木) 12:54:40.43ID:cbUpLCW6
"http://2ch.net/","111.txt" がクロームでみると文字化けするんですけど
間に . が入る
最新50からみると文字化けするけどトップからだと文字化けしない。

884デフォルトの名無しさん2017/03/23(木) 13:10:42.63ID:uMFW1qqt
>>874
外してたらごめんやけど
そういうのはssh-agent, agent forwardingの領域でrubyで解決する問題じゃない。

8858492017/03/23(木) 13:18:58.68ID:uU/dK4ok
ruby本体のフォルダに
open-uri.rbというファイルがあります。

私としたら、
FXのサイトにrubyではなくIEを使ってアクセスしてると思われたいのです。
で、
open-uri.rbをいじれば、FXのサイトに「IEを使ってアクセスしている」と偽装可能でしょうか?

886デフォルトの名無しさん2017/03/23(木) 13:23:26.78ID:1Qddb7ZO
どこまでこのモチベーションが続くのか、ちょっと興味がある。

887デフォルトの名無しさん2017/03/23(木) 13:29:31.97ID:zvUDs3dx
>>886
まだ表示してんのか
物好きだな

8888492017/03/23(木) 14:21:23.28ID:uU/dK4ok
>>886
その気持は俺もあって、
1、学校で奴隷のようにプログラミング言語を仕込まれる
2、〜〜のソフトを作りたいという欲が上達の近道
って2つあるけど、
1、のルートしかないのかな?って思う今日この頃なんだよねwww

889デフォルトの名無しさん2017/03/23(木) 15:29:43.02ID:dnzxf4sO
irbで
> 1/2
=> 0.5
となるようなオプションってあります?

890デフォルトの名無しさん2017/03/23(木) 15:42:26.17ID:3KgHIgrA
1/2.0

891デフォルトの名無しさん2017/03/23(木) 16:12:02.19ID:zvUDs3dx
>>889
irbはRubyの対話実行環境であって電卓ではない
Rubyとしての挙動に不満で電卓のように使いたければ電卓を使え
WindowsならSCAPとかいろいろあるぞ
ttp://www.vector.co.jp/magazine/softnews/020309/n0203092.html

回避法としては
・どっちかを浮動小数点にする
> 1.0/2
> 1/2.0
・割り算はMath#fdivを使うことにする
> 1.fdiv(2)
=> 0.5
・非推奨ライブラリmathnをrequireして分数にしてもらう
> require 'mathn'
> 1/2
=> (1/2)

892デフォルトの名無しさん2017/03/23(木) 16:15:37.54ID:zvUDs3dx
……。違うな。Numeric#fdivか。すまんね

893デフォルトの名無しさん2017/03/23(木) 17:55:59.42ID:dnzxf4sO
>>890
それが面倒なんで聞いた次第
>>891
電卓代わりに使いたいんだよね
>>892
> 1.class
=> Fixnum
Fixnumでは

とりあえずオプションはなさそうなので
http://stackoverflow.com/questions/9745122/how-can-i-redefine-fixnums-plus-method-in-ruby-and-keep-original-function
を参考にすることで自己解決しました

894デフォルトの名無しさん2017/03/23(木) 18:31:44.34ID:dbie/DTi
電卓代わりに使うならrequire 'mathn'して内部ではRational使って計算精度たかめつつ、
.irbrcをいじってRationalを表示するときに小数に変換して表示するのがおすすめ

895デフォルトの名無しさん2017/03/24(金) 00:37:05.54ID:8SSjzg+S
>>883
.rb ファイルを、TeraPad などのエディタで開いて、BOMなし UTF-8(UTF-8N)で保存する

コマンドプロンプトよりも、PowerShell_ISE の方がいい。
どちらも文字コードを、UTF-8にしておく

ブラウザなどweb関係では、すべてのファイルの文字コードは、UTF-8で統一しておく

>>885
ブラウザ種別は、JavaScriptの、window.navigator.userAgent;
で判別しているかも。
そこを偽装すれば、出来るかも

ただし相手が、modernizr を使って、ブラウザの機能をテストして判別していれば、
userAgent を偽装しても仕方ない

896デフォルトの名無しさん2017/03/24(金) 01:04:59.05ID:LvaD/h2O
Ruby2.x系に対応したレシピブックって無いんですか……
Rubyレシピブック第3版が2010年で止まってるので困ってます

897デフォルトの名無しさん2017/03/24(金) 14:52:34.07ID:HIpLSJu0
pythonくっくぶっく読め

8988492017/03/24(金) 15:44:03.65ID:/hN+XEZl
>>895
レスありがとうございます。
modernizr.jsというのがあるんですね。
勉強になります。
なんでも、FiddlerCoreというのがあって、それでブラウザに出入りするすべての情報が見られるらしいんです。

899デフォルトの名無しさん2017/03/24(金) 15:56:31.78ID:suDsBIm1
>>897
それ訳書は2005年版だぞ

900デフォルトの名無しさん2017/03/24(金) 18:08:31.51ID:enVRLviO
>>896
最新の情報を追っていきたいなら
Pythonに言語を変えるべき

901デフォルトの名無しさん2017/03/24(金) 19:02:13.41ID:LoToasEt
そうだねRubyはもうオワコン…

902デフォルトの名無しさん2017/03/24(金) 20:10:01.69ID:87HMKY7E
seleniumでchromedriverのコマンドプロンプトが出て邪魔なんだけど
消す方法ないですか?
しらべたらC#しか出来ないみたいなので教えてください。

903デフォルトの名無しさん2017/03/24(金) 20:43:09.91ID:9VMQOfeX
解決する必要のない問題
SeleniumはDockerで動かすものだと思ってる

904デフォルトの名無しさん2017/03/24(金) 22:08:47.90ID:PYtcfDaS
rubyが動いてるのとは別のプロンプトが出るの?

905デフォルトの名無しさん2017/03/24(金) 23:25:24.42ID:87HMKY7E
rubywでやるとプロンプトがでるの
rubyでやるとrubyのプロンプトしかでないの

906デフォルトの名無しさん2017/03/25(土) 00:07:50.04ID:w1qI1jrD
ではrubyでやればよいのでは?

907デフォルトの名無しさん2017/03/26(日) 01:11:17.34ID:9bRE2FVy
ruby用にmacが欲しい
なんでwindouwsだと環境構築こんなに面倒になってしまったんですかね
rbenvも使えないし

908デフォルトの名無しさん2017/03/26(日) 01:47:38.74ID:520b61Y6
>>907
Windowsはもともとそんなもんだから
Rubyに限った話ではない
言語のせいというより、WindowsがUnixとの相性をとことんまで捨ててきた結果

909デフォルトの名無しさん2017/03/26(日) 03:06:46.11ID:EKCv78dE
先日のNet::SSHのアホだが、suした後にコマンド叩いてコマンドの出力は取れたんで一応報告まで
参考になるかはわかんないけど、力業でやるしかないようだ

http://ideone.com/vGFRog

cdとかexportやるとめんどくさそう(shellモードで走らないとアレなので)
別メソッド内でlambdaをたくさん用意して、open_channelブロック内でlambda配列をcallしまくらないとダメかも

910デフォルトの名無しさん2017/03/26(日) 03:15:36.47ID:EKCv78dE
というか、誰が見るのかもわからんが、ググって後悔する人用?

911デフォルトの名無しさん2017/03/26(日) 04:15:06.61ID:d2qW/2Sn
csvの扱い方が良く分からん……

Encoding.default_external = Encoding::UTF_8
require 'csv'
CSV.foreach("msg.csv") do |row|
p row
end
=>["id", "msg"
=>]
["1", "hello"]
=>
["2", "1234"]
=>
["3", "テスト"]

この状態にまで持っていく事が出来たけど、
IDのナンバーを指定→格納されてるを表示させるっていう方法が分からない……
ID3を選んだらテストって表示されるっていう感じ

912デフォルトの名無しさん2017/03/26(日) 05:59:49.62ID:PRpbdmfu
>>907-908
Win10の、Bash on Ubuntu on Windows
(Windows Subsystem for Linux, WSL)では、Rubyは動く?

それか、Chef(Vagrant)

>>911
Msg = Struct.new(:id, :msg) # クラスを作る
msgAry = []

# ヘッダーは不要
CSV.foreach("msg.csv", headers: true) do |row|
msgAry << Msg.new(row[0], row[1]) # 配列に追加
end
p msgAry

ary = msgAry.select {|row| row.id == '3' } # filter
p ary, ary[0].msg

データ数が多いのなら、SQLite3 などのDBを使うべき

913デフォルトの名無しさん2017/03/26(日) 06:10:56.54ID:EKCv78dE
>>911
かずがそこまででもないならこの程度でいけるよー

require 'csv'

# data = {} でもおk
data = Hash.new
skip_first = true

CSV.foreach("a.csv") do |row|
if skip_first
skip_first = false
else
data[row[0].to_i] = row[1]
end
end

p data[3]

914デフォルトの名無しさん2017/03/26(日) 12:28:08.64ID:uiu02Zxm
>>912>>913
ありがとうございます!
配列かハッシュを使って上手いことやるって感じなんですね
参考にして頑張ります!

915デフォルトの名無しさん2017/03/26(日) 14:35:31.38ID:hVl7ZVni
>>908
というよりRubyがUNIXにべったり依存してることがそもそもの問題だろう
Pythonなど他の主要なスクリプトはそこまで依存してないぞ

916デフォルトの名無しさん2017/03/26(日) 14:38:47.27ID:Yy5rv7Z6
>>911
Encoding.default_external = Encoding::UTF_8
require 'csv'
a = CSV.readlines("msg.csv") # 配列の配列として一気に読み込み
p a[3] # カラム名付き配列から直にindexを指定
p a.select{|row| row.first == '3'} # 条件に会う要素*全て*を含む配列
p a.assoc('3') # 配列の配列を検索して、0番目の要素がそうなってる最初の要素
h = Hash[a.drop(1)] # drop(1)で最初のカラム名の行捨てて、Hashに
p h['3'] # idをキーにしてmsgを取り出す

917デフォルトの名無しさん2017/03/26(日) 19:38:31.52ID:PRpbdmfu
DBのレコードには、>>912 のように、
きっちりと構造を定義した、クラス・構造体を使うべき

配列・ハッシュなどは、表の仕様変更に弱いから、おすすめしない

「Effective Ruby」項目10に書いてある。
構造化データの表現には、Hashではなく、Structを使おう

本当は、DBを使うと、検索用のインデックスを張るなど、検索速度が上がる。
全レコードをループして、線形探索しない。
線形探索の計算量は、レコード数に比例するから、遅い

918デフォルトの名無しさん2017/03/26(日) 20:46:28.35ID:hVl7ZVni
たかがスクリプトでそんなのどうでもいいよ
HashとStructなんか実用上大した差はない
どうせStructなんか生で使う時点でカプセル化もクソもない
DBも導入や運用の手間やデータが単純なテキストでなくなることを考えると
よほどのことがない限りはコストに見合わない

919デフォルトの名無しさん2017/03/27(月) 00:28:58.33ID:Veh84ZPS
rubyって例外処理どうやってるの?
実行するまでどの例外が出るのか分からないからトライアルアンドエラーしてくしかないの?

920デフォルトの名無しさん2017/03/27(月) 00:29:50.81ID:A5EmHHW6
rescueでぐぐれ

921デフォルトの名無しさん2017/03/27(月) 00:36:09.18ID:OggmZorO
>>919
ドキュメントに書く
例外の静的チェックなんかやってるのは後にも先にもJavaだけだ
フレームワークや関数型と極めて相性が悪く、Javaが犯した大失敗の一つとされている

922デフォルトの名無しさん2017/03/27(月) 01:02:23.75ID:UxXnYzuG
Swift「うむ」

923デフォルトの名無しさん2017/03/27(月) 02:43:39.87ID:+1P0P+cw
>>919
どんな例外であっても捕捉したけりゃ

begin
  例外が起こったら捕捉するブロック
rescue Exceptions
  例外回復処理
end

として見るといい

ただし個人的には、きちんとした理由がない限りはRuntimeErrorまたはそのサブクラスに限るべしと考えている

924デフォルトの名無しさん2017/03/27(月) 06:54:09.40ID:OggmZorO
>>922
あれは型を指定できないから別物でしょ
規模が大きくなったり例外の使用が普及していくと大半のメソッドにthrowsが付いて意味をなさなくなるよ
例外が後付けであることと、
iOSアプリなので規模が小さいしその場の判断でカジュアルに落としていいということを前提とした
限定的なやり方だね

925デフォルトの名無しさん2017/03/27(月) 21:24:01.57ID:ndaSX+xy
>>921
やっぱりjavaみたいにその場では分からないのね
ruby使ってる会社なんてベンチャー系が多いわけで、ドキュメントもそんなにしっかり書いてるところなんてほんと1握りだろうし難しい問題だな

926デフォルトの名無しさん2017/03/27(月) 21:45:27.38ID:OggmZorO
>>925
いやRuby(というかRails)の場合は例外はフレームワーク任せで最上位で捕捉が基本だから何も難しいことはないよ

927デフォルトの名無しさん2017/03/27(月) 22:41:14.67ID:UxXnYzuG
>>926
Rubyに限らず明示的なハンドリングが必要なケース以外は最上位で補足が基本だと思うよ

>>925
使ってるライブラリがどういう例外をはくのかドキュメント見ても分からないなら
そういうライブラリを使うのを避けるかソース見ればいいんじゃね?
例外はAPIの一部だから明示されていて当然

「Javaみたいにその場で分かる」の意味が分からないし現実問題として困ったことはない

928デフォルトの名無しさん2017/03/27(月) 22:57:57.14ID:VL/gciGG
まあ「RubyがJavaじゃないので困る」とか「Rubyがオブジェクト指向の基本の○○を守ってない(実際は○○はJavaの方言)」とか
そういうのはけっこうあるので、自分の知らない言語を学ぶ機会になっていいんじゃないですかね

929デフォルトの名無しさん2017/03/27(月) 23:32:21.51ID:kIuVYWQO
その場で分かるは検査例外に他ならないでしょ

…って言ってみておいて何だが
検査例外っていう言葉がどっから来たのか不明だな
https://docs.oracle.com/javase/specs/jls/se8/html/jls-11.html
このへん見てもせいぜいchecked exceptionsとあるだけで
どこの誰が検査例外とか言い出したんだろうな

930デフォルトの名無しさん2017/03/28(火) 00:08:58.11ID:5RUVNWwS
>>929
検査例外のことだとすると
非検査例外はその場で分からないから困るって話になっちゃう気がするので
何か違うものを指してるんじゃないのかな?

931デフォルトの名無しさん2017/03/28(火) 03:00:23.83ID:vGNqj6m3
>>919
一番上の呼び出し元でrescueしてログにゲロるだけ、ってのがよくあるパターン
で、次の日にログみてエラー出てたら直すかどうか調べる
その程度

ありとあらゆるgemの挙動をすべてわかってるわけでもないしな、医者の「様子見」って奴だ

932デフォルトの名無しさん2017/03/28(火) 20:55:44.43ID:IwCv7Hc+
自分で書いたプログラムが徐々に進化していく感じが凄い楽しい
この感覚を共有したいのですが良いコミュニティ無いですか?

933デフォルトの名無しさん2017/03/28(火) 21:51:04.91ID:Ri9BGdNQ
github

934デフォルトの名無しさん2017/03/28(火) 22:05:15.21ID:sFbRrsU+
Rubyのanyとallで捗るがほかの言語でもあるのか

935デフォルトの名無しさん2017/03/28(火) 22:17:59.25ID:xRgDj2E5
>>934
リスト操作の関数が揃ってるのなら大抵あると思うが
JavaScriptにでもあるぐらいなんだから(everyとsome)

936デフォルトの名無しさん2017/03/29(水) 03:22:52.75ID:d5wwz1O4
>>934
pythonにもあるけど、rubyと考え方が変わるから注意して
「ジェネレータ内包」というか、関数が中にいる、yieldで蹴り上げてくれない

937デフォルトの名無しさん2017/03/29(水) 04:12:06.05ID:ZwfTQ2HH
Ruby/JavaScriptに慣れてるとPythonはマジキチ

938デフォルトの名無しさん2017/03/29(水) 07:59:46.71ID:I/A0mp99
JavaScriptにはyield(Rubyのなんちゃってyieldじゃなくてジェネレータの方)も
リスト内包表記もasync/awaitも入ったからそうでもないよ
残念ながら他の言語がおかしいのではなくRubyが時代から取り残されている

939デフォルトの名無しさん2017/03/29(水) 17:21:28.60ID:euTeqsbN
Atomのautocomplete-rubyで>>614と全く同じエラーが出て自分なりに確認してみました
すると、spoonというライブラリ内にunix.rbとwindows.rbというファイルがあり、
unix.rb内にはFileActionsクラスがあるにもかかわらずwindows.rb内には存在しないようでした
このことから初心者なりにrsenseがunixにしか対応していないためにrsenseがエラーを吐いているのではないかと考えたのですが
rsense(ver0.5.18)をwindows環境で利用できている人はいるでしょうか?
もし無理ということであればrubyの自動補完をAtomで使う方法はあるでしょうか?

940デフォルトの名無しさん2017/03/29(水) 18:36:36.32ID:1MGUWYwx
rsenseをWindowsで使うのは無理

941デフォルトの名無しさん2017/03/29(水) 20:12:20.88ID:xjmvyT9X
という事はwindowsに対応したRubyのautocompleteって存在してないのか……
自分でスニペット作るしかないか
resenseのソースコードってどっかで読めますか?

942デフォルトの名無しさん2017/03/29(水) 20:27:20.55ID:euTeqsbN
>>940
そうでしたか…
調べたところ他にrubyの自動補完のパッケージはなさそうですし無しで妥協するしかなさそうですね
>>941
これがrsenseのソースコードのようです
https://github.com/rsense/rsense

943デフォルトの名無しさん2017/03/29(水) 20:29:01.46ID:nzjlIS7M
gem install rsense すりゃいいだろw

944デフォルトの名無しさん2017/03/29(水) 20:50:59.00ID:nzjlIS7M
ああ、中身が無いって話なのか

945デフォルトの名無しさん2017/03/29(水) 21:26:26.67ID:1MGUWYwx
自分は昔ネット記事読んで入れてみようとしたけど失敗した
技術力が高いやつなら使えるかもしれん
自分は無理だった

946デフォルトの名無しさん2017/03/29(水) 21:43:00.76ID:tXXWC1wQ
windowsでrsense使えてるんだけど

947デフォルトの名無しさん2017/03/29(水) 22:09:52.87ID:xjmvyT9X
rsenseに補完のコード載ってなかった……
一から自作とか面倒すぎて泣ける
どっかに良い補完コードないのか

948デフォルトの名無しさん2017/03/29(水) 23:28:43.33ID:ZwfTQ2HH
>>938
Pythonでジェネレータ使いたいケースの大半はRubyだとeachやlazyの組み合わせで間に合うからね
本当に必要な時だけEnumeratorやFiberを使えばいい

PythonはRubyやJSに比べると低いレイヤーを意識しないといけないケースが多いんだよね
関数のComposabilityの低さが一番の癌

949デフォルトの名無しさん2017/03/30(木) 13:07:08.50ID:9EoNq122
rubyだとyieldじゃないのかな

950デフォルトの名無しさん2017/03/30(木) 16:29:17.37ID:blpqU3yN
test

x=%W(a b c d)
p x[0..2] # →["a", "b", "c"]
p x[2..0] # →[]
p x[0..10] # →["a", "b", "c", "d"]
p x[2..10] # →["c", "d"]
p x[10..0] # →nil
p x[-1..-3] # →[]
p x[-3..-2] # →["b", "c"]
p x[-10..-2] # →nil

951デフォルトの名無しさん2017/03/30(木) 16:40:30.67ID:9EoNq122
p x[-5..-2] # →

952デフォルトの名無しさん2017/04/03(月) 14:02:42.69ID:EgKRTgNa
wondows10、64bitにbundle installの際にnio4rが
インストールできずにはまっています。
rails 5.02 ruby 2.2.6です。
rubyinstallerを使ってdevkitをダウンロードしてbatとinitとinstallはすませました。
gem updateとsqlite3もダウンロードしました。nokogiriもダウンロードしました。
誰か頭のいい方教えてください。

953デフォルトの名無しさん2017/04/03(月) 14:33:11.72ID:L89e5t3/
Rails5のgem installでnio4rのインストールに失敗する - Qiita
http://qiita.com/mugi_uno/items/4657444a79acb98ac981

954デフォルトの名無しさん2017/04/03(月) 14:33:18.24ID:U4t48yq0
rubyとdevkitの32bit/64bitが食い違ってるに3票

955デフォルトの名無しさん2017/04/04(火) 04:32:42.42ID:QcgfrUUh
>>919
> rubyって例外処理どうやってるの?
> 実行するまでどの例外が出るのか分からないからトライアルアンドエラーしてくしかないの?
Rubyに限らないが、

1. すべての例外に対する共通処理を書く。
2. 特別な処理だけカスタマイズする。

というやり方を取る。
2. が必要になることは殆ど無いので、
共通の例外処理だけで十分なようにあなたが作る

956デフォルトの名無しさん2017/04/08(土) 10:00:53.29ID:I9Aqo/S7
クラス定数の書き方がよくわかりません…

class Hoge
 FUGA = "piyo" # 書き方その1
 @@FUGA = "piyo" # 書き方その2
end

どっちで書くべきなんでしょう

957デフォルトの名無しさん2017/04/08(土) 10:28:58.68ID:VX8+Virx
@@hogeはクラス変数だから「その1」じゃないとダメ

958デフォルトの名無しさん2017/04/08(土) 10:36:07.28ID:xaSJ94RF
再代入してみ

959デフォルトの名無しさん2017/04/08(土) 10:39:24.46ID:fKVMhPX5
後者はただの「大文字で始まるクラス変数」だぞ
irb> class C1; CONST=1; CONST=2; end
(irb):1: warning: already initialized constant C1::CONST
(irb):1: warning: previous definition of CONST was here
irb> class C2; @@CONST=1; @@CONST=2; end
irb> C1.const_get :CONST
=> 2
irb> C2.const_get :@@CONST
NameError: wrong constant name @@CONST
irb> C2.class_variable_get :@@CONST
=> 2

960デフォルトの名無しさん2017/04/08(土) 13:49:46.96ID:3oGgRyKA
const_get (Module) - Rubyリファレンス
http://ref.xaio.jp/ruby/classes/module/const_get

961デフォルトの名無しさん2017/04/09(日) 02:23:55.86ID:+d/g4xuk
>>956
ほとんどのruby使いなら

FUGA = "piyo"

って書いてたら定数だと判断する
代入なんぞするわきゃねえから安心していい、公式のdocでそういうルールですって言ってるからな
守らん奴が悪いのだ

@@FUGA = "piyo"

だったらなんかヤバいかもって予想する
例がないこともないけど、たとえば……SQLのER図の字面と合わせるためにあえて全部大文字で書いてる? みたいな奴

定数目的でやってるなら@@は必要ないよ
@@ついてたらクラス横断で書き換える予定の変数って意味なんで(割と扱いがヤバいやつ)

962デフォルトの名無しさん2017/04/09(日) 02:29:22.11ID:+d/g4xuk
@@XXXX = "yyy"

みたいなのは、要件として「全然プログラミングわからん人がなんか触るかも」という要件があって
ER図と突き合せたらわかるように配慮した、みたいな話だったんだけどね
……むしろそんなのに触らせんなという話なんだろうが

定数目的なら@@は不要ですわよ、@@ついてたら「どこかで書き換わる可能性がある」って意味にしか取れないので

963デフォルトの名無しさん2017/04/12(水) 08:10:16.25ID:wEqEhwuC
Rubyで定数を扱う場合はfreezeするべき
http://qiita.com/yukiyan/items/39f945c55b6dc5e11ed7

配列などのコンテナも凍結できるし、さらにその中の各要素も凍結すればよい

964デフォルトの名無しさん2017/04/12(水) 08:42:52.97ID:A6XRqe5e
>>963
どうでもいい
そういうフールプルーフ論をしだしたらRubyなんか使えなくなる
Rubyはプログラマに最大限の自由と責任を与える言語で、不適切な扱いをすれば定数に限らず簡単に崩壊する

965デフォルトの名無しさん2017/04/12(水) 09:55:58.18ID:eUe7Ztpf
Q. ユーザーに変更して欲しくない変数があるのですが
A. マニュアルに赤字ででっかく書いておく

がギャグじゃないからなRuby
将来の開発者の行動を制限したいなら改変で失敗するテストでもつけとけ

966デフォルトの名無しさん2017/04/12(水) 16:26:28.16ID:yUUEzJPF
>>964
freezeしとくと最適化のヒントになる
所詮スクリプトだし速度はどうでもいいならごめん

967デフォルトの名無しさん2017/04/12(水) 17:57:55.99ID:t+ieauVX
正規表現で(?<=)と\Kで挙動が違うことがあるんだけどこれってバグ?

str = 'foooooo!!!'
p str[/(?<=o+)!*/]
# => invalid pattern in look-behind: /(?<=o+)!*/
p str[/o+\K!*/]
# => "!!!"

968デフォルトの名無しさん2017/04/14(金) 17:08:22.32ID:W2Q9fgxr
ここに書いてあったわ。すまん
http://k-takata.o.oo7.jp/mysoft/bregonig.html#SCT-5.1.7.

969デフォルトの名無しさん2017/04/14(金) 19:13:37.72ID:kd81bztX
freezeっていうコンセプトはいいよね
変数ごとのconstっていうのでも十分有難いけど
変数じゃなくてオブジェクト側を不変にできる安心感ってすごいと思う

970デフォルトの名無しさん2017/04/18(火) 12:26:20.44ID:ZXyqFz5f
class Test
def dice
return rand(6) + 1
end

def thrower(receive = nil , &block)
if receive == nil
block.call(self,block)
else
receive.call(self,receive)
end
end
end

Test.new().thrower{|a,b| ( a.dice < 4 ) ? a.thrower(b) : (p "saiki_owari") }

#throwerメソッドの仮引数について質問
#最初のthrowerにブロックを与えた時は&blockで受け取れるんだけど、
#二回目以降はreceiveじゃないと受け取れない
#これをなんとか&block一本で受け取れるようにならないでしょうか?

971デフォルトの名無しさん2017/04/18(火) 12:34:12.91ID:xS1+Nete
a.thrower(&b)

972デフォルトの名無しさん2017/04/18(火) 12:37:16.86ID:ZXyqFz5f
すみません
環境書いてませんでした

x86
ruby1.8.6

973デフォルトの名無しさん2017/04/18(火) 12:39:36.44ID:ZXyqFz5f
>>971
無事に仮引数を一本化できました
有難う御座いました

974デフォルトの名無しさん2017/04/18(火) 12:42:32.99ID:ycY/feUC
めちゃくちゃ本筋とずれてるけど
試しのコードのクラス名にTest使うのはやめたほうがいいよ
Cとかなんかそういうのにしとけ

975デフォルトの名無しさん2017/04/18(火) 12:46:33.74ID:ZXyqFz5f
テストフレームワークのと見間違うからやめた方が良いという事でしょうか?
気をつけます

976デフォルトの名無しさん2017/04/22(土) 10:45:11.23ID:6qfFdcME
JSONはドキュメントにはオブジェクトをダンプすると書いてありました
配列かハッシュ以外のオブジェクトをダンプすると変な暗号みたいな文字列になります
配列かハッシュの中のオブジェクトの値を配列かハッシュに変換するような
メソッドを用意して変換した配列かハッシュをダンプするみたいなことはできないのでしょうか

977デフォルトの名無しさん2017/04/22(土) 10:59:08.68ID:SoGX0B4D
JSON形式の文字列に変換してダンプしたんなら JSON#parseでRubyのオブジェクトに戻せばいいんじゃないの
そもそも質問文の日本語がよくわからない

978デフォルトの名無しさん2017/04/22(土) 11:39:10.72ID:DtRoC9Q8
>>976
ActiveSupport 入れて #to_json 使う

979デフォルトの名無しさん2017/04/22(土) 14:51:13.21ID:nTMTCqPH
>>976
JSON は扱えるデータが nil true false 整数値 実数値 UTF-8文字列 配列 ハッシュのみ
それ以外のデータを出力したい場合はクラスごとに #to_json を自分で書くしかない

どういう環境を想定しているのかわからないが、YAMLやMarshalの利用も考えてみた方がいい

980デフォルトの名無しさん2017/04/23(日) 14:02:40.48ID:3CgRQnGp
rect_color = "Red"
img.rectangle!(from, to, :color => OpenCV::CvColor::<<ここにrect_colorを展開したいです>>, :thickness => 1)

9819802017/04/23(日) 14:05:36.07ID:3CgRQnGp
>980です。
クラスで定義された定数(?)などの名前の一部に変数展開したいのですが、
どのような記法になるのでしょうか?

# tab+Enter間違えて押して投稿しちゃいました・・・

982デフォルトの名無しさん2017/04/23(日) 14:27:00.35ID:MkKwpytP
>>981
OpenCV::CvColor.const_get(rect_color)

983デフォルトの名無しさん2017/04/23(日) 14:56:42.56ID:1GeMi3V/
作業工程のステップ数はどう計算する?

9849802017/04/23(日) 15:06:44.62ID:3CgRQnGp
>982
メソッドで書くとは思わず、#{xxx}等と書くのかと思っていました
ありがとうございました。

985デフォルトの名無しさん2017/04/23(日) 15:10:40.84ID:fuXae4k3
>>983
そんなもんwc -lでいい
どうせ何の意味もない指標なんだから難しく考えるだけ時間の無駄

986デフォルトの名無しさん2017/04/23(日) 15:51:01.88ID:MkKwpytP
>>984
あとはハッシュを用いる方法もある

evalを使う方法でも出来るが、ウェブサービスなど他人の手が介入する場合は
任意のコードを埋め込むことで好き勝手されることになるため、使うべきではない
俺の伯父貴はそれで責任取らされた

987デフォルトの名無しさん2017/04/23(日) 15:51:32.62ID:MkKwpytP
>>986
誤)伯父貴
正)兄弟会社の社長

988デフォルトの名無しさん2017/04/24(月) 02:16:10.51ID:tTIPHNHA
rails5の新しい本が出てたけど
あれ読んだ人感想教えて

989デフォルトの名無しさん2017/04/24(月) 09:12:04.50ID:UdTP1JyN
Rails4本のページ数より1割増し

990デフォルトの名無しさん2017/04/24(月) 19:44:07.66ID:Kyqb8D8F
買うか迷ったけど、どの辺りが増えたか分からんかったから見送ったわ
ほとんど4のやつと一緒っぽいし

991デフォルトの名無しさん2017/04/26(水) 23:52:32.11ID:1b43zh74
プログラミング無学者です
rubyのオススメの参考書ありますか?

992デフォルトの名無しさん2017/04/26(水) 23:59:37.90ID:QjgCMKxe
その場合はたのしいRuby以外の答は返ってこないと思う

993デフォルトの名無しさん2017/04/27(木) 02:16:08.57ID:K/c6qdg9
Rubyの配列で変数って使えないのでしょうか?

a0,a1,a2,a3,a4,a5,a6,a7,a8,a9 = gets.split.map(&:to_i)
t = gets.chop.split("").map(&:to_i)

ary = [a0,a1,a2,a3,a4,a5,a6,a7,a8,a9]

t.each do |i|
puts arya[t[i]]
end

というコードを書いたのですが
no implicit conversion from nil to integer (TypeError)というエラーが出て動かず
理想としては
ary = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

t = [1, 3, 5]として
p arya[t[0]]
=> 1
という結果を繰り返して表示する、というのを目指したのですが、動かないので……

994デフォルトの名無しさん2017/04/27(木) 02:17:08.38ID:K/c6qdg9
すみません、aryとaryaが混ざってしまいました
全てaryで書かれている物としてみてください

995デフォルトの名無しさん2017/04/27(木) 04:09:54.62ID:FW9wlyor
>>993
t.each do |i|
puts arya[t[i]]
end
だと、2周目が
t[3] => nil でまずいんじゃないの

ていうかputs ary[i]がやりたい事じゃない?

996デフォルトの名無しさん2017/04/27(木) 04:16:58.66ID:K/c6qdg9
>>995
まさにその通りでした!
これで解決です、有難うございます!

997デフォルトの名無しさん2017/04/28(金) 20:54:05.02ID:E80Nlt1P
三角関数の計算って普通高コストだよな・・・とHashにキャッシュするようにしてみたら速くなるどころか遅くなったw

998デフォルトの名無しさん2017/04/28(金) 23:51:48.21ID:7VffJ0oI
Rubyはそれ自体がゲロ遅いのでCの関数に丸投げしてるだけの三角関数の計算自体のコストなんて
全く無視できる

999デフォルトの名無しさん2017/04/29(土) 00:15:25.00ID:eMb5q7il
使い方にもよるけどHashに中間値保存してたらたぶん遅い
どうせなら2次元の配列表に保存しよう
なんだかっていう昔の高速計算法

1000デフォルトの名無しさん2017/04/29(土) 01:49:55.04ID:urVXnFrH
というかHash#[]>Math.sinだからHashでは工夫の余地ないな
Array#[]は僅差でMath.sinより速いようだ

>>999
参考までにどんな方法?最初はArrayを考えていたけど入力値がFloatなのであきらめた

10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 208日 8時間 59分 17秒

10021002Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.2ch.net/

▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php

レス数が1000を超えています。これ以上書き込みはできません。