2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

Ruby 初心者スレッド Part 55

1 :デフォルトの名無しさん:2014/06/21(土) 23:39:44.94 ID:rKd1VvW8.net
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
RoRはスレ違いよ

前スレ
Ruby 初心者スレッド Part 54
http://peace.2ch.net/test/read.cgi/tech/1392598207/

るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/

Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/

逆引きRuby
http://www.namaraii.com/rubytips/

2 :デフォルトの名無しさん:2014/06/21(土) 23:40:40.82 ID:z7G+00JR.net
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                         霊長類研究所

3 :デフォルトの名無しさん:2014/06/21(土) 23:57:21.14 ID:nSPSSkcc.net
>>1

4 :デフォルトの名無しさん:2014/06/22(日) 00:02:10.62 ID:P/6Lf536.net
>>前1000
.NET3.5向けにビルドしたものは
マニフェストファイルで.NET4.5での動作を許可するよう指定すれば.NET4.5上で動く
デフォルトで動かないのはMSのクソ厳格な互換性ポリシー(.NETは業務向けだからね)によるもので、
普通の基準でいえば完全な互換性がある

5 :デフォルトの名無しさん:2014/06/22(日) 01:13:10.71 ID:upDz43Y5.net
>>997
>自分が調べた結果では
>Win7は.NET Framework2.0/3.0/3.5が入っている
>Win8は.NET Framework4.5が入っていて.NET Framework3.5は無効化されている

Win7向けにビルドしたC#アプリを素のWin8へインストールして実行しようとすると、
.NET Frameworkのバージョン不一致で起動すらできないってこと?
そうだとしたらWindowsは糞だけど、信じられんな
OSXならCocoaフレームワークが2つ前くらい迄なら、平気で実行できるのに

6 :前1000:2014/06/22(日) 18:36:27.68 ID:ZfkThsTa.net
>>4
情報ありがとう、そういうことなんだね....
元質問者さんの目的であれば、マニフェストファイルを修正して
差し替えた改変版の IronRuby とスクリプトを irpack でexe化すれば、
解決できる可能性はありそうだ

MSの互換性ポリシーに関しては、それが業務向けであるということなら、
妥当な方針だと言わざるをえない(中途半端に動くよりもベターだから)

とはいえ、OSX上での開発がC++/CarbonからObjC/Cocoaへ完全移行したように、
WidowsでもC++/Win32からC#/.Netへ移行したものだと思い込んでいたけど、
Win8の時代に至っても一般のデスクトップアプリ開発ではC++/Win32が必須なんだね
業務アプリではない元質問者さんが、IronRuby の採用そのものに抵抗を感じるのも分かる

7 :デフォルトの名無しさん:2014/06/22(日) 19:08:05.07 ID:kD+jIMJ8.net
一般のデスクトップアプリ開発ではC++/Win32が必須
一般のデスクトップアプリ開発ではC++/Win32が必須
一般のデスクトップアプリ開発ではC++/Win32が必須
一般のデスクトップアプリ開発ではC++/Win32が必須
一般のデスクトップアプリ開発ではC++/Win32が必須
一般のデスクトップアプリ開発ではC++/Win32が必須
一般のデスクトップアプリ開発ではC++/Win32が必須
一般のデスクトップアプリ開発ではC++/Win32が必須

8 :デフォルトの名無しさん:2014/06/22(日) 21:40:35.61 ID:LFA4ujmd.net
発狂して終了か

9 :前スレ966:2014/06/22(日) 23:19:35.65 ID:95RLu5vG.net
>>4をみてIronRuby 1.1.3を試してみました
.NET Frameworkのバージョン以前に.起動の遅さとRubyコードの実行の遅さが気になります
手近なコードを走らせてみましたが.NET Framework 4.5.1でIronRuby 1.1.3が走り出すまで
3秒強くらいかかります。.NET Framework 3.5だと6秒くらいかかります
さらにコードが実行完了するまで4秒くらいかかります。コードの実行時間は
.NET Framework 4.5.1でも.NET Framework 3.5でも大差ないようです
同じコードをRuby 2.1.2で実行するとコードの実行に0.1秒強くらい(起動は一瞬)なので
ちょっと遅いとかそういうレベルではない感じです
JRubyも同じくはかってみましたがJRuby 1.7.12が起動するまでに5秒くらい、コードの実行完了
に2秒弱くらいでした
VM実装の処理系だと遅いのはさけられなさそうですね。これだと1.8の方がまだ速そうです

Rubyから.NET Frameworkのクラスを呼び出すようなラッパーがあれば・・・っとググって見ると
Ruby/.NET Bridgeなるものがあったらしい?(今は消滅?)。使えるレベルのラッパーがあれば
本家の高速性と豊富な.NETのクラス群を使えて良いとこ取りが出来そうですが

う〜む・・・Rubyで行くならRuby 1.8.7+wxRuby 0.6.0でお茶を濁すしかないのか・・・
RubyにこだわらないならPython+wxPythonやC# for VC#2008EXあたりになるのかな

#計測に使ったコードはStringにconcatしまくる系の物です

10 :デフォルトの名無しさん:2014/06/22(日) 23:19:40.68 ID:jnseZCAU.net
互換性ポリシー弄れば動くっつてんのにそこからC++/Win32必須なんだねとか意味不
端っから自分の妄想した結論以外は受け付ける気がないでしょ

11 :デフォルトの名無しさん:2014/06/23(月) 01:29:19.73 ID:LLEITqEE.net
なんで違う人に絡んでるのか

12 :デフォルトの名無しさん:2014/06/23(月) 03:34:48.43 ID:owP8nPZ4.net
wxPythonおぬぬぬ

13 :デフォルトの名無しさん:2014/06/23(月) 20:00:51.23 ID:Jv1bdWLq.net
ところでRubyって何の役に立つの?

14 :デフォルトの名無しさん:2014/06/23(月) 20:13:31.25 ID:9imRHr/V.net
>>13
コンピュータに命令することができます。

15 :デフォルトの名無しさん:2014/06/23(月) 22:15:43.67 ID:BINMcHFB.net
人に命令するの上手くなったほうが100倍マシだな

16 :デフォルトの名無しさん:2014/06/23(月) 23:03:36.19 ID:7NlEu9GA.net
命令を聞いてくれる相手を探すのが先だな。

17 :デフォルトの名無しさん:2014/06/23(月) 23:51:44.83 ID:owP8nPZ4.net


18 :デフォルトの名無しさん:2014/06/23(月) 23:57:28.82 ID:s879JP9J.net
リファレンスマニュアルのインスタンス変数のところに
attr_accessorの使用例がほしいな
外部からインスタンス変数を参照する方法って何かあったよなと
リファレンスマニュアルとにらめっこすること数十分。メソッド定義の
ところにattr_accessorの使用例が載っているのを見つけて一件落着した

19 :,,・´∀`・,,)っ-○○○:2014/06/24(火) 00:09:30.84 ID:xHFmkiJx.net
instance_variable_get / instance_variable_setの使い方覚えておくと
自前でアクセサ定義するときに助けになりますよ

20 :デフォルトの名無しさん:2014/06/24(火) 07:58:05.88 ID:1kTNOLbu.net
ソースのエンコーディング(たとえばsijis)を指定した状態で
str.concat "\xff\xff\xff\xff"
と書くとデータ列によってCompatibilityErrorが起きる場合がありますが
これを防ぐ方法はありますか?
str.concat [0xffffffff].pack("V")
と書けば同じ結果を得られますが↑の書き方よりかなり遅いです

21 :デフォルトの名無しさん:2014/06/24(火) 11:06:05.40 ID:VrH3d8m/.net
ジャップまた負けたのかwwww

22 :デフォルトの名無しさん:2014/06/24(火) 18:47:07.86 ID:r/Uvv29G.net
>>20
str.concat "\xff\xff\xff\xff".force_encoding(str.encoding)
ではどうだろうか?

23 :デフォルトの名無しさん:2014/06/24(火) 19:47:53.32 ID:c5+BSms2.net
>>20
文字列をバイト列として扱う場合はエンコーディングをASCII-8BITに揃えるがよろし

24 :デフォルトの名無しさん:2014/06/24(火) 21:06:26.58 ID:3Daegd5r.net
バグっぽいの見つけた。
p(
1
2
) #=> syntax error ←分かる

p((
1
2
)) #=> 2 ←分かる

p (
1
2
) #=> syntax error ←2個目のコードの引数の括弧を省略した形だから2になるはず

25 :デフォルトの名無しさん:2014/06/24(火) 21:39:43.41 ID:c5+BSms2.net
>>24
メソッド名とカッコの間にはスペースが許されているので、一番上と同じように解釈される
よって syntax error

26 :デフォルトの名無しさん:2014/06/24(火) 22:43:47.80 ID:3Daegd5r.net
引数が2個以上あるメソッドだとスペース挿むとエラーになるけどそれは

27 :デフォルトの名無しさん:2014/06/25(水) 09:01:04.56 ID:jzzlw1ru.net
p (( 1 2 )) # => syntax error
p (( 1
2 )) # => 2

また負けたのかwwwwwwwwwwwww

28 :デフォルトの名無しさん:2014/06/25(水) 14:42:21.47 ID:A2jEgt78.net
>>27
p (( 1
2 )) # => 2
これは
p (( 1; 2 )) # => 2
と同じ

>>25
irb(main):001:0> p(1,2)
1
2
=> [1, 2]
irb(main):002:0> p (1,2)
SyntaxError: (irb):2: syntax error, unexpected ',', expecting ')'

29 :20:2014/06/25(水) 19:32:24.84 ID:y7Yol2H5.net
>>22-23
ありがとうございます。両方とも問題なく動くようです
ascii-8bitの指定はRuby 1.8相当の動作という認識で
良いのかな?

30 :デフォルトの名無しさん:2014/06/27(金) 11:27:08.04 ID:4a84RfsAs
メソッドで以下のような記述を見ることがあるのですが、||= beginはどういう意味・目的なのでしょうか?
resucue節が見当たらないため不思議に思っています。

@hoge ||= begin
処理...
end

31 :デフォルトの名無しさん:2014/06/28(土) 14:23:12.83 ID:Vb0rbHjb.net
ifで条件にマッチした場合に使うライブラリを呼ぶ直前でrequireをしたら
「requireはソースコードの上の方でやるもんだ」
って言われました。

使うかどうか分からないのにとりあえずrequireするのっておかしくないですか?
gemの依存関係はgemspecに書いてるし、そのソースコードでどんなライブラリが使われているか一覧することに何のメリットがあるんですか?
知りたければgrep requireすればいいですよね?
って言ったら怒られました。
よくわかりません。

32 :デフォルトの名無しさん:2014/06/28(土) 17:48:20.84 ID:Ik80dgEP.net
ケース・バイ・ケースだけど、どうしても動的に require しなければいけない理由がない限りは
ソースの上の方でやっておいた方が見通しはよくなるね

33 :デフォルトの名無しさん:2014/06/28(土) 18:02:41.94 ID:MBrErHLJ.net
慣習

34 :デフォルトの名無しさん:2014/06/28(土) 18:11:58.34 ID:JCL+UsP9.net
>>31
そのライブラリの依存関係をgemspecで必須と明示してあるなら、
その仕様(specificationに従って、単純にファイルの先頭で require すべき
ある特定の「条件にマッチした場合」に限るという実装(implementation)は、
ライブラリが必須であるという仕様に違反している

35 :デフォルトの名無しさん:2014/06/28(土) 20:27:57.09 ID:Vb0rbHjb.net
>>32
どうしてもってわけでもないけど、
コマンド叩いてすぐに処理結果が欲しいコマンドツールの類いだとrequireすると遅くならない?
RoRとか立ちあげっぱなプログラムならまだ許容できるけど。
>>34
よくわからんけど、そうすると、
例えばhttpサーバのライブラリがあるとして、
http_server -versionってバージョン表示させるだけでspec.add_dependencyのgemを全部requireしてるのですか?

36 :デフォルトの名無しさん:2014/06/28(土) 22:47:38.23 ID:JCL+UsP9.net
> コマンド叩いてすぐに処理結果が欲しいコマンドツールの類いだとrequireすると遅くならない?

いや、requireの実行時間が問題になるようなRubyアプリケーションは、ほとんど存在しない
もしアプリケーションの起動時間が気になるほど遅いのであれば、まず性能測定をすべき
多くの状況下では require 以外の処理、たとえばサーバへの接続待ちや
大量のデータファイル読み込み等がボトルネックになっているはず

> http_server -versionってバージョン表示させるだけでspec.add_dependencyのgemを全部requireしてるのですか?

そうだよ、実行時に必須なライブラリはサーバ起動時にすべてrequireする
逆に、必須ではなく条件に応じて必要になるライブラリは spec.add_dependency せず、
サーバ起動後に特定の「条件にマッチした場合」に require する
たとえばプラグインのようなオプション・ライブラリは、設定ファイルで指定された場合、
あるいはプラグイン・ディレクトリにライブラリが存在する場合にだけ require する

37 :デフォルトの名無しさん:2014/06/29(日) 01:12:28.28 ID:fkqTTz9x.net
たとえばwatirだとnewした後に色々とrequireされてる
最初のrequire"watir"で必要以上のクラス定義までやってない

こうすべきだみたいなのをしつこくいう奴は一種の精神病か高2病みたいなもん
絶対に正しいソースコードの書き方なんてものはないのに

38 :デフォルトの名無しさん:2014/06/29(日) 02:19:09.05 ID:+CIKJ6ui.net
>>36
例えばrails -vしても明らかに必要最低限のスクリプトしかrequireしてないわけだが、
これもやっぱり>>34的には違反してるね。
屁がでそうになってきた。

39 :デフォルトの名無しさん:2014/06/29(日) 11:01:30.37 ID:Jxhjl2/k.net
Railsはオートロードのための仕組みを持ってるので、そもそもrequireを書く必要がない

40 :デフォルトの名無しさん:2014/06/29(日) 11:56:13.78 ID:cjgiIXv/.net
>>38
Rails級の巨大フレームワークを開発するプロジェクトは、ごくまれな特殊ケース

一般的なRubyアプリケーション/ライブラリ開発プロジェクトの場合:
・動的な require が必要なケースは、組込みの Kernel.#autoload を使う
・つまり「(必須ライブラリを)単純にファイルの先頭で require する」(>>34)が
 「(必須ライブラリを)単純にファイルの先頭で autoload する」に代わるだけ

Railsフレームワーク上でのアプリケーション開発プロジェクトの場合:
・開発中(development)では頻繁にRailsの再起動を繰り返すので、
 アプリケーションは遅延ロード(lazy loading)される --> デフォルトの動作
・本番運用時(production)では、
 アプリケーションは単純に(=貪欲に)ロード(eager loading)される
・ただし、もしも常に(=本番運用時でも)遅延ロードさせたい必須ライブラリがあるなら、
 メソッド ActiveSupport.on_load のブロック引数内で明示的に require する

>>31のような、if文を使った条件判定による動的な require は推奨されない
一般的なプロジェクトはもちろん、たとえRailsアプリケーション開発であっても

41 :デフォルトの名無しさん:2014/06/30(月) 02:08:57.29 ID:BzHZeElB.net
推奨されない(キリッ)

42 :デフォルトの名無しさん:2014/06/30(月) 15:42:59.39 ID:qlWBcG3y.net
thorで半角スペースを含む引数ってどうすんの?
普通に
--foo='bar baz'
ってやると
--foo=bar
baz
ってバラされちゃうんだけど

43 :デフォルトの名無しさん:2014/06/30(月) 16:14:43.24 ID:9mB1LZ3w.net
エスケープ

44 :,,・´∀`・,,)っ-○○○:2014/06/30(月) 20:23:55.18 ID:la/ujWVd.net
条件分岐でインスタンスの動作変えたいならポリモーフィズムで実現すべきだろ

45 :デフォルトの名無しさん:2014/07/01(火) 11:24:36.03 ID:WApzAG0A.net
Mechanizeとかだと最初のrequireがかなり重い
実はあれIDN対応のライブラリを読んでて無駄に重い
国際化ドメイン名なんて99%の人間には不要なのだが

46 :デフォルトの名無しさん:2014/07/05(土) 03:05:10.71 ID:FujCrvNA.net
C言語厨が作るライブラリは規則規則ってなっててそうなる

47 :デフォルトの名無しさん:2014/07/05(土) 09:38:00.53 ID:eW5SdgQ8.net
どこかでRuby使いの人が「PHPは関数が多くて覚えきれない」とコメントしているのを読んだんですけどRubyってそんなに関数が少ないんですか?
逆に関数が少ないと困ったりしないのかと不安になるのですが。

48 :デフォルトの名無しさん:2014/07/05(土) 09:42:51.16 ID:MbZ2I/h/.net
ヒント: namespace

49 :デフォルトの名無しさん:2014/07/05(土) 10:08:09.40 ID:gQAWVLid.net
ちょっとだけ違う名前のよく似た(しかも長い)関数が成立経緯上仕方なくうまく整理できずにバラバラに存在するため、
Rubyのように本当の最初からクラスやモジュールがあってそこに整理され(最悪でも詰め込まれて)いるライブラリと比べると、
どうしても存在レベルで冗長でわかりにくく間違いやすい印象が否めない

というような程度の意味だろう
本当に記憶に支障があるという話ではない

50 :デフォルトの名無しさん:2014/07/05(土) 10:21:12.46 ID:MxOk5d7i.net
>>47
たとえば、文字列と配列の長さを取得する場合

Ruby:
string.length
array.length

PHP:
strlen($string)
count($array)

たとえば、文字列と配列を逆順にする場合

Ruby:
string.reverse
array.reverse

PHP:
strrev($string)
array_reverse($array)

確かにPHPのを覚える自信は、俺にはない

51 :デフォルトの名無しさん:2014/07/05(土) 10:21:28.25 ID:6PKoBQqR.net
整理されてれば覚えなくてもだいたいドキュメントですぐ探せるからな

52 :デフォルトの名無しさん:2014/07/05(土) 10:37:30.05 ID:MbZ2I/h/.net
sprintf
wsprintf
sprintf_s
_sprintf_l
_swprintf_l
__swprintf_l

確かに覚えられん

53 :デフォルトの名無しさん:2014/07/05(土) 12:27:47.54 ID:mPq5qhEh.net
数年前にwxrubyで書いたアプリを手直ししようと思ったんだけど、
web上のドキュメント的なものが一切なくなってて困ってます
知らない間に滅んだ?

54 :デフォルトの名無しさん:2014/07/05(土) 12:38:25.10 ID:5PqNKKxq.net
>>53
Webではないデスクトップ向けGUIツールキットは、
どれも寂しい/厳しい状況みたいだね
Mac限定なら MacRuby、Unix系限定なら Ruby-GNOME3 を選べるけど、
Windows系やマルチプラットフォーム系はどれもこれもメンテされていない

>>4-9 および前スレ終盤あたりも参照

55 :デフォルトの名無しさん:2014/07/05(土) 13:21:17.02 ID:eW5SdgQ8.net
みなさんありがとうございます。
似たような動きをする関数なのに無駄に細分化されていて面倒だって事なんですね。
確かに文字列も配列も同じ関数(メソッドでしたっけ?)で操作出来たほうが直感的に書けますね。
やはりPHPからは移行した方が良さそうですね。
日本製だから日本語の不具合なんかも起こりにくいだろうし。

56 :デフォルトの名無しさん:2014/07/05(土) 14:00:29.85 ID:mPq5qhEh.net
>>54
丁度似た悩みの方がいらしたんですね
参考に色々試してみます ありがとうございました

本当に滅びつつあったとは凹む

57 :デフォルトの名無しさん:2014/07/05(土) 14:02:51.25 ID:MbZ2I/h/.net
Ruby は Web 用言語(キリッ

58 :デフォルトの名無しさん:2014/07/05(土) 14:03:50.21 ID:5PqNKKxq.net
>>55
ちなみに Python の場合

長さを取得:
len(string)
len(array)

# len(x) は関数だから、string.len() や array.len() とは書けない

逆順にする:
# string.reverse() ==> 文字列は不変オブジェクトなので反転できずエラー
array.reverse()

# Python のreverse() メソッドは、操作対象を破壊的に操作する(sort() も同様)
# Ruby であれば、非破壊な Array#reverse と破壊的な Array#reverse! という
# 二種類のメソッドが組込みで提供される

Python の一貫性の無さと比較すれば、
・オブジェクト指向言語である Ruby は、オブジェクトへのメソッドとというスタイルで
 統一されたプログラミング・インターフェイスを楽しめる
・非破壊メソッドが提供されているので、メソッド・チェーンを使った
 流れるような関数型プログラミングを楽しめる

59 :デフォルトの名無しさん:2014/07/05(土) 16:01:37.65 ID:AM2aRkfD.net
Rubyの直交性の高さになれているとほかの言語はストレスがたまる

60 :デフォルトの名無しさん:2014/07/05(土) 16:59:56.26 ID:6PKoBQqR.net
Rubyはそんなに直交性高くないと思うぞ
Javaのライブラリとか直交性が過剰なのはすげえ使いづらい
Rubyは客観的な直交性よりも、ユースケースを想定して
一緒に使うものが近くにくるようにまとめてある感じがする
どっちかというと.NETに似てるかな

61 :デフォルトの名無しさん:2014/07/05(土) 18:33:03.23 ID:pJl1PMF0.net
今時、Ruby使うとか、どんだけニワカ

62 :デフォルトの名無しさん:2014/07/05(土) 18:53:37.70 ID:lUrjnl8F.net
プログラミングを始めようと思った時
PHPが良いよって知り合いに言われて
どれどれと思って検索したら
「あっ(これはちかづいちゃいけない)」って思って
そいで近所の先生にきいたら
HSPとかすぐに動くのができていいよって言われて
どれどれと思って検索したら
「あっ(これはちかづいちゃいけない)」って思って
そのあとRubyを始めた

63 :デフォルトの名無しさん:2014/07/05(土) 18:55:26.27 ID:5PqNKKxq.net
>>59,59
直交性という言葉は堅苦しいので、
「驚き最小の原則」と呼ばれることがあるね
ただし、Wikipediaによれば Matz が
この原則を設計哲学に採用したことはないそうな

64 :デフォルトの名無しさん:2014/07/05(土) 20:56:37.25 ID:eW5SdgQ8.net
>>58
Pythonとの違いを教えて頂けて助かりました。どちらにしようか迷っていたので。
表示速度が遅いとGoogleから冷遇されやすいというのが頭にあって「遅い」と言われ続けていたRubyには不安で手を出せなかったんです。最近物凄く速くなったと聞いて真面目に検討していました。
例示していただいたコードみたいに統一感があるのは初心者としては取っ付きやすそうです。

65 :デフォルトの名無しさん:2014/07/05(土) 21:10:42.13 ID:lUrjnl8F.net
(´・ω・`)最近暇だ…
(´・ω・`)RoR秋田…

66 :デフォルトの名無しさん:2014/07/05(土) 22:17:07.92 ID:gQAWVLid.net
なんだろう、なんかもやもやする

67 :デフォルトの名無しさん:2014/07/05(土) 23:37:16.48 ID:ZoUg1MJx.net
小日帝国で大麻が合法化されないなら
ゲートウェイランゲージRubyは違法化されるべきニダ

68 :デフォルトの名無しさん:2014/07/06(日) 01:20:26.14 ID:P2yVj5Pd.net
>>50
うえーん reverse なんてあったんだ、知らなかった

69 :デフォルトの名無しさん:2014/07/06(日) 01:28:14.97 ID:+YGfR2l7.net
arr.compact
arr.compact!
上は元の配列を変更しないけど、
下は元の配列を変更する(破壊的なメソッド)

Matzは人間がボトルネックになることを知っているから、
なるべくルールを明確にして、
覚えることを減らそうとしたのだろう

70 :デフォルトの名無しさん:2014/07/06(日) 01:53:09.63 ID:YqH0gfGj.net
!付きメソッドの重要性は昔より低下している気がするな
昔は結構速度差があったから!で済むときは!を使った方が
速かったけど、最近はその差がだいぶ縮まった

そういやPythonやJavaScript向けにRuby似の標準クラス
ライブラリとかあったらすごく使いたいと思う

71 :デフォルトの名無しさん:2014/07/06(日) 06:13:16.56 ID:qu0eEdBG.net
>>69
!ついてなくても破壊的なの結構あるよね

はい論破

72 :デフォルトの名無しさん:2014/07/06(日) 07:31:07.09 ID:hw7hO+cc.net
!はできるのに!?はだめなのはどうして?
変数名に!とか?はだめなのはどうして?
変数名の最初の文字に数字が駄目なのはどうして?

73 :デフォルトの名無しさん:2014/07/06(日) 11:48:59.33 ID:BCJIA2if.net
破壊的なものに!を付けるんじゃなく、!ありなし2バージョン設ける場合は
より注意が必要なほうを!付きにする、というのがもともとのお約束。

Railsだと、!ありなし2バージョンある場合、!ありは失敗時に例外を投げる、
!なしは偽を返すみたいになってたかな。

74 :デフォルトの名無しさん:2014/07/06(日) 11:58:02.96 ID:bJUCx13z.net
そもそもルールでもないし文法でもないからなメスッド名末尾の ! や ? は
アンダースコアと同じで、便利に使ってもらって構わない
(その使い方が他の人にとっても便利かどうかは保証しないが)

75 :デフォルトの名無しさん:2014/07/06(日) 12:03:33.80 ID:GKoC5bbZ.net
>>72
0xff

76 :デフォルトの名無しさん:2014/07/06(日) 12:32:08.87 ID:bJUCx13z.net
変数名とかの先頭に数字が使えないのは
「そっちのほうが余計なこと考えなくて速く内部処理できるので、伝統的に人間側に我慢してもらっている」
という程度の回答しかない

全角イコールの=でも変数代入できれば便利かもしれないし、
全角空白と半角空白を同一視すれば初心者に優しいかもしれないが、
処理系はたったそれだけのためにアホみたいに遅くなる
なので誰もやらない

それと似たようなもんだ

77 :デフォルトの名無しさん:2014/07/06(日) 12:38:59.42 ID:JQNQW/rx.net
>>76
そんなパージングの速度なんかたかがしれてるよ
単純に需要がないからやってないだけ

変数名の最初に数字が使えないのは、数値リテラルと区別するためだよ

78 :デフォルトの名無しさん:2014/07/06(日) 14:12:09.10 ID:bJUCx13z.net
>>77
変数名の先頭に数字使えないプログラミング言語は掃いて捨てるほどあるけど、
どれも揃って需要がないから足並み揃えてやってないんですか?

79 :デフォルトの名無しさん:2014/07/06(日) 14:20:25.72 ID:hw7hO+cc.net
!?とかつかいたいんだけど
破壊的にお問い合わせする場合とか

80 :デフォルトの名無しさん:2014/07/06(日) 14:54:18.29 ID:Vjzww54e.net
お前なんで他の言語巻き込んで話を一般化しようとしてるの?

81 :デフォルトの名無しさん:2014/07/06(日) 14:55:10.41 ID:JQNQW/rx.net
>>78
そうだよ

Lispなんかは数字が先頭でも大丈夫じゃなかったかな

82 :デフォルトの名無しさん:2014/07/06(日) 15:12:17.13 ID:UgKQDcKg.net
010 == 8

83 :デフォルトの名無しさん:2014/07/06(日) 21:55:00.85 ID:Nj41+MNM.net
>>70
>そういやPythonやJavaScript向けにRuby似の標準クラス
>ライブラリとかあったらすごく使いたいと思う

JavaScript だと Underscore.js とういライブラリが相当品になるね
Ruby の Enumerable 提供メソッドと比較すると
JavaScript の標準ライブラリは貧弱だけど(map/select/inject相当しかない)、
これを Underscore.js が補ってくれる
この Underscore.js とDOM操作ライブラリである jQuery の組合せが、
今時の一般的な JavaScript プログラミングらしい

Python に関しては、よく知らんけど実現不可能じゃないかと思う
>>58では書いていなかったけど、Rubyのブロックに相当する
Python のラムダ式には、その本体に式しか書けない(=文が書けない)という
関数型プログラミングにとっては致命的な制限がある
この制限によって、Ruby や JavaScript と比較するとメソッド・チェーンの
簡潔さや表現力が著しく劣る(はっきり言って使い物にならない ....)
関数型も部分的には導入したけど、あくまで手続き型プログラミングが主体である、
というのが Python の設計哲学なので、それを受け入れるしかない

84 :デフォルトの名無しさん:2014/07/07(月) 13:56:06.17 ID:x3+FWwz1.net
win7でRubyインストールしたんだけど、
コマンドプロンプトではgemコマンドも実行できるのにgithub入ってるpowershell.exe上だとgemがコマンドレットになる
どうすればいい?

85 :デフォルトの名無しさん:2014/07/07(月) 16:56:05.67 ID:SPqafUmZ.net
サーバー開発用なら仮想マシンにLinux入れろ
Win環境での作業に使うスクリプトならPythonへ行け

86 :デフォルトの名無しさん:2014/07/07(月) 18:19:53.12 ID:tDx8Ub5T.net
_人人人人人人人人_
> 突然のPython <
 ̄Y^Y^Y^Y^Y^Y^Y ̄

87 :デフォルトの名無しさん:2014/07/07(月) 19:08:17.84 ID:RBOB+lfi.net
Bundlerでnokogiri入れようとしてるんですが、
packaged librariesを使ったビルドって最近のMacで何時間くらいかかるものなんでしょうか?

ちなみに当方の環境はMacBook Pro 15inch Ratina (2013)です。
OSはMavericksです。
目安もなくただ待つの辛いっす(´・ω・`) packaged librariesでビルド成功した人いたら所要時間教えて下さい。

88 :86:2014/07/07(月) 19:48:06.65 ID:RBOB+lfi.net
ようやく終わった…。
約2時間というところでした。上手く行ってよかった…。
お騒がせしました(´・ω・`)

89 :デフォルトの名無しさん:2014/07/07(月) 21:31:59.62 ID:mALYvw5d.net
>>84
ならばコマンドプロンプト上で実行すればいいんじゃないの?
もしUNIX相当の操作性が欲しいなら、Cygwin や GnuWin 等で
bash のEXE版を導入するのが手っ取り早い方法

もしどうしてもPowerShell環境を前提にしたいなら、
この板の専用スレで質問したほうがいいと思う
PowerShell からすれば Gems も単なるコマンドの一つにすぎないんだから

90 :デフォルトの名無しさん:2014/07/08(火) 02:23:11.91 ID:gmDQAblm.net
(´・ω・`)ルビー究めたらモテる?

91 :デフォルトの名無しさん:2014/07/08(火) 10:42:52.19 ID:it1DuFz/.net
>>89
ありがとうございます。
PowerShellをそもそも理解していなくて、確かにcmdでコマンド打っていけばいいんですね。
githubのgitShellがPowerShellでのリモート接続?みたいになってて、わけわからなかった

Cygwin、GnuWin勉強になりました。

92 :デフォルトの名無しさん:2014/07/09(水) 02:38:35.03 ID:Mc0pdBnn.net
powershellは入力補完も効くし、
処理の結果を、オブジェクトで扱える

デバッグ環境なら、powershellと同じフォルダにある、
powershell_iseを使えばよい
コマンドを画面で指定できる

-WhatIf で実行せずに、結果を見れる

93 :デフォルトの名無しさん:2014/07/09(水) 10:15:07.54 ID:7mAKqlSH.net
RT >84

>>90
Python の方がモテる

94 :デフォルトの名無しさん:2014/07/09(水) 10:34:32.06 ID:Gd8+EGXP.net
>>93
RTってw
ここはツイッターじゃねえんだよ
あとPythonの方がモテるってデータよこせ
昨日別のスレで根拠もなくPythonのシェア80%とかほざいたバカがいたが
お前は違うよなぁ?

95 :デフォルトの名無しさん:2014/07/09(水) 21:16:51.49 ID:upQsnXcW.net
Python利用者はおっぱい好きが多い

96 :デフォルトの名無しさん:2014/07/10(木) 09:17:42.80 ID:bTs9rCAT.net
概ね、型がStringのオブジェクトに対して
メソッドを定義したいのですがその際、
Stringを継承する以外の方法はあるでしょうか
影響範囲を狭めたくて。

97 :95:2014/07/10(木) 09:19:22.09 ID:bTs9rCAT.net
>>96
ごめんなさい、重要なことが書きもれていました。
メソッドチェーンができるようなメソッドを定義したいです。

98 :デフォルトの名無しさん:2014/07/10(木) 10:36:07.22 ID:b/HkBDRx.net
必要なメソッドだけString型に委譲とか
でもStringを継承しないことによって影響範囲が狭まるのか?
継承元がほぼ不変といっていいなら対して差がないんじゃないか

99 :デフォルトの名無しさん:2014/07/10(木) 10:46:05.37 ID:K4xUSUJb.net
基本クラス本体に勝手にメソッド追加するような奴は死んでいいよ
そして全滅するActiveなんとか

そのStringオブジェクトがひとつくらいしかなくて、他への影響が心配なのなら、
メソッド入れたモジュールつくって、自作文字列オブジェクト単体にがちょんとくっつけるといい

100 :デフォルトの名無しさん:2014/07/10(木) 10:54:25.59 ID:K4xUSUJb.net
irb> module MyString; attr_accessor :author; end
irb> str = "Gimmick!"
irb> str.extend(MyString)
irb> str.author = "俺俺"
irb> puts str.author
俺俺

101 :デフォルトの名無しさん:2014/07/10(木) 22:12:15.29 ID:42BTLfYF.net
windowsでgetsを使ったらどうも文字数が254文字くらいまでしか入力できないんだけど
そういうもんなの?

102 :デフォルトの名無しさん:2014/07/10(木) 22:19:12.89 ID:fp5I0Zvk.net
いいえ

103 :デフォルトの名無しさん:2014/07/11(金) 01:08:57.98 ID:O/mv0f8o.net
自己解決しました
rubyinstallerとかいうのでインストールしたのが悪かったっぽい

バグ?

104 :デフォルトの名無しさん:2014/07/11(金) 01:36:26.58 ID:gdJsXwWR.net
バグだったら何か問題があるのかね?

ってくらいWindowsはかなり見放されてる印象

105 :デフォルトの名無しさん:2014/07/11(金) 02:16:33.74 ID:Mxpl8CKX.net
linuxも酷いもんだよ。

106 :デフォルトの名無しさん:2014/07/11(金) 15:57:23.04 ID:AtibPlU5.net
rbenv install 2.1.2でルビー2.1.2をインストールしようとしてるんだけど、
Installing ruby-2.1.2...のままもう1時間くらい経過してる。
こんなに時間がかかるのはおかしくないの?
ちゃんとインストールが進んでるのか何か確認方法はない?

107 :デフォルトの名無しさん:2014/07/11(金) 16:14:35.16 ID:gnwgBFCI.net
ディスクの残り容量が減ってるかどうか見るのもありだけど
おそらく gems のダウソに時間がかかってるパターンなので
容量が変化しないままだんまりの可能性が高い
つまり放っておくといつのまにかダウンロード終わるから気長に待て

108 :デフォルトの名無しさん:2014/07/11(金) 16:15:58.79 ID:gnwgBFCI.net
暇だったらここでも読んでて
http://www.slideshare.net/znzjp/rubygems

109 :デフォルトの名無しさん:2014/07/11(金) 16:18:57.15 ID:AtibPlU5.net
>>108>>108
ありがとう

110 :デフォルトの名無しさん:2014/07/11(金) 18:25:47.30 ID:AtibPlU5.net
ちょうど今、
Installed ruby-2.1.2 to /Users/ttomo/.rbenv/versions/2.1.2
と出てインストールが終わりますた
インストールに要した時間は2時間半ほど
かかるもんだね・・・

111 :デフォルトの名無しさん:2014/07/11(金) 18:29:40.28 ID:AtibPlU5.net
訂正 3時間半ですた

112 :95:2014/07/11(金) 23:03:34.33 ID:aUe3n0ai.net
>97-99

回答azs!
モジュールかーなるほど。

113 :デフォルトの名無しさん:2014/07/12(土) 03:10:58.15 ID:hZ9DjkyP.net
gemsは糞

114 :デフォルトの名無しさん:2014/07/12(土) 04:33:10.46 ID:RUmdKNHy.net
SinatraとActiverecordを使う時に便利に活用出来そうな参考書を何冊か教えて下さい。Nginxの設定方法なんかもあると助かります。

115 :デフォルトの名無しさん:2014/07/12(土) 09:11:31.68 ID:uOtl6yha.net
Sinatraはほとんどないね。O'reillyの入門Sinatraぐらいじゃないか
ActiveRecordはRails本からつまみ食いするしかなさそう
nginxはそこら中にあるから適当に選べ

116 :デフォルトの名無しさん:2014/07/12(土) 14:45:19.65 ID:x0cGe7WX.net
Sinatraを使うくらいなら最初からRoRを使えば良い
コントローラかモデルが1〜2個までがせいぜいの使いどころ
ARが必要になったらそれはもうRoRの案件

117 :,,・´∀`・,,)っ-○○○:2014/07/12(土) 21:27:32.12 ID:7ywFD7/R.net
Railsでscaffoldから作ると楽だからね
ArelなしでOR条件くらい使いたいぜ。
SQLの部分文字列直にたたくってのは抜きで

118 :デフォルトの名無しさん:2014/07/13(日) 01:31:28.39 ID:/jPIFi1F.net
>>114
本当にActiveRecord が使いたいの? Sequel のほうが合ってるんじゃない?

119 :デフォルトの名無しさん:2014/07/13(日) 01:46:09.11 ID:MZ7WZ/da.net
LinuxMint13にダウンロードしたRuby2.1.2を入れました、
$ make
したら、警告が2つ出ました。
iseq.c: 関数 ‘iseq_load’ 内:
iseq.c:540:2: 警告: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]

compiling handle.c
compiling cptr.c
cptr.c: 関数 ‘rb_dlptr_inspect’ 内:
cptr.c:392:10: 警告: 使用されない変数 ‘str’ です [-Wunused-variable]

これ以外の異常はなくインストールできましたが、問題ないんでしょうか?

120 :デフォルトの名無しさん:2014/07/13(日) 01:59:43.15 ID:gfKEp18x.net
CのWarningなんて気にすることはない
他のソフトウェアでもガバガバでるものだ

121 :デフォルトの名無しさん:2014/07/13(日) 08:34:30.23 ID:pCB2HMHj.net
出ることが「わかって」いる警告をなんで直さないんですか、というのは結構深淵な問題ででしてですね…

122 :デフォルトの名無しさん:2014/07/13(日) 08:36:53.55 ID:g8Ou8aAJ.net
ソース納品したら
警告出るんですけど
って苦情言ってくる客を思い出した

123 :デフォルトの名無しさん:2014/07/13(日) 11:32:33.70 ID:pCB2HMHj.net
>>122
その苦情は正しい
コンパイル時の警告は
その記述が不完全であり、今はたまたま動作しているのかもしれないが
近い未来に必ずやバグや不具合や修正困難性の原因遠因となろう
ということをまさに文字通り警告しているものだから

唯一の問題はそんな未来が来ないかもしれないということだけだぬ用途的製品寿命的に
契約で縛っとくべきっすな

124 :デフォルトの名無しさん:2014/07/17(木) 05:25:09.39 ID:T/tQ8OHK.net
A(){
 変数a
 return B(){}
}

クロージャって、Aの内側にある関数Bを呼ぶと、
Bから見て外側にある変数aが、なぜか使える。
つまり、Aの環境ごと保存していること

これは、どういう時に使うの?

125 :デフォルトの名無しさん:2014/07/17(木) 05:53:56.38 ID:Cd0nud4+.net
>>122
保守で食ってますからね
と言えばいい

126 :デフォルトの名無しさん:2014/07/17(木) 07:12:32.40 ID:qRzp09G7.net
>>124
Ruby的例で言えば

a = 1
[1,2,3].each {|i| puts i + a }

この場合、each というメソッドの中でその外側にある変数 a が使える

127 :デフォルトの名無しさん:2014/07/17(木) 07:42:24.22 ID:Cd0nud4+.net
>>124
うーん
JavaScriptやらLuaなどのClassの代替手段として
上位値を使ったイディオムがうんぬんってのはあるけど
スレ違いだなw

128 :デフォルトの名無しさん:2014/07/18(金) 13:20:19.63 ID:ZlrEmABu.net
$i = 0
while true
  $iを使って何かする
  sleep 一日寝る
  $i += 1
end

こういう構造のスクリプトをcronなどから一日一回呼び出して即終了するスクリプトに書き直すと
変数の状態をpstoreとかで全部保存、復旧する必要が出てきて面倒なんですが
そういうのを支援してくれるうまいやり方って無いものですかね
スクリプトのレジューム機能的なもの

129 :デフォルトの名無しさん:2014/07/18(金) 14:54:12.99 ID:9vc2upx2.net
>>128
>変数の状態をpstoreとかで全部保存、復旧する必要が出てきて面倒なんですが
普通はファイルに設定を保存して終了し、次回起動時に読み込む
この世のほぼ全てのプログラムはそのように動作している

つまりどんなプログラムなのか把握できてないのね
保存と読み込みが面倒なのではなく、必要な変数かどうかを調べるのが面倒

130 :デフォルトの名無しさん:2014/07/18(金) 14:56:18.98 ID:9vc2upx2.net
回答忘れてた

>>128
そんなん、現状鑑みるなら元のスクリプト動かすのでいいんじゃないのん
わざわざ「よくわからないRuby」なんかで書き直す必要性を感じない

131 :デフォルトの名無しさん:2014/07/18(金) 18:47:30.96 ID:9k7OCpHX.net
VM上で動かせばいいよ。レジュームとかはVM任せにできる。

132 :デフォルトの名無しさん:2014/07/19(土) 22:26:03.80 ID:YDMzLIag.net
madeleine 使えば。

133 :デフォルトの名無しさん:2014/07/20(日) 19:37:04.60 ID:jDI27gQ2.net
最近、FreeBSD10環境でRuby2.1.0を入れたのですが、
Emacsのinf-rubyでirbを立ち上げると入力行がエコーバックされるように
なってしまいました。
以前のバージョンでは入力行はエコーバックされず実行結果だけの表示
だったと思うのですが、
原因と解決策をご存知の方おりませんか?

134 :デフォルトの名無しさん:2014/07/20(日) 23:58:13.27 ID:BWtO9PBt.net
全く調べてもいないけどreadlinesがうんたらかんたら

135 :デフォルトの名無しさん:2014/07/21(月) 01:10:13.39 ID:15AfdAD4.net
>>133
http://takuya-1st.hatenablog.jp/entry/20110717/1310890039

136 :デフォルトの名無しさん:2014/07/22(火) 20:19:49.75 ID:E9EuZoOu.net
入力xに対して、3つの値を返すeuclidという関数があったとして

[x, y, z] = euclid(x)

のようにデータを代入する方法はないでしょか?
今のところ、

data = euclid(x)
x = data[0]
y = data[1]
z = data[2]

と書いています
もうちょっとわかりやすい書き方があれば教えて下さい

137 :デフォルトの名無しさん:2014/07/22(火) 20:24:38.12 ID:RgZSUrOG.net
x,y,z=[1,2,3]

138 :デフォルトの名無しさん:2014/07/22(火) 20:51:15.29 ID:E9EuZoOu.net
>>137
[]括弧がいらないだけでできたんですね
教えて下さりありがとうございます

139 :デフォルトの名無しさん:2014/07/23(水) 01:47:58.13 ID:C1MAaOhX.net
start = Time.now
puts start - Time.now



これの結果が0.052003だった場合、0.05秒、つまり50ミリ秒ということですか?

140 :デフォルトの名無しさん:2014/07/23(水) 02:02:06.43 ID:vbN86xg+.net
>>139
http://docs.ruby-lang.org/ja/2.1.0/method/Time/i/=2d.html

141 :デフォルトの名無しさん:2014/07/24(木) 22:48:33.94 ID:QzlnANU7.net
ruby始めたいんですが、テスト実行する時は毎回コマンドプロンプトでcd打ち込んでしこしこやるもんですか?

142 :デフォルトの名無しさん:2014/07/24(木) 22:53:34.81 ID:mk/qqxYw.net
RubyはUNIX系のOSで使うもんだからコマンド使うのは当然

143 :デフォルトの名無しさん:2014/07/24(木) 23:23:04.40 ID:TORgOaiD.net
>>141
OSX(Mac) なら、Finder 上のフォルダをターミナル画面へドロップすると、
そのフォルダの UNIX ディレクトリパスが入力される
だから、ターミナルでは cd とだけ打てばいい

あと Linux や OSX 等を含む UNIX の対話環境だと、シェルがディレクトリ名や
ファイル名を補完してくれるから、プロジェクトの構成が整理されていれば
先頭の数文字を打って後はシェルの補完に頼ることができる
だからタイピングが苦手でも、環境に慣れればそれほど苦痛とは感じなくなる(はず)

144 :デフォルトの名無しさん:2014/07/25(金) 00:24:45.92 ID:M5DbZg9u.net
現在作って実行してみたいスクリプトは1つしかないだろうし、
1つしかないってことはそれが入ってるディレクトリは1つだけだろうし、
rubyコマンドに指定するファイル名も1つだけのはずである

つまり1回だけコマンドプロンプトを起動してファイル置き場に1回だけ移動して
ファイル編集したあと1回だけファイル名をrubyコマンドの引数に入力して実行すればいい
どれも1回だけだ
もういちど実行したい場合はコマンドプロンプトのヒストリ機能で呼び出してEnterすればよろしい
キーボードの上矢印で順番に出てくる

下手にマウスとか使おうとすると煩雑で死ぬのでキーボード使うこと

145 :デフォルトの名無しさん:2014/07/25(金) 00:40:14.11 ID:mPXiIZE+.net
>>141
楽をしたいだけなら実行までできるIDEを使えば。

楽をするための苦労を厭わないなら、簡単にcdとかできる、しなくてもいい方法を考えたら。
いい勉強になるだろう。

146 :デフォルトの名無しさん:2014/07/25(金) 01:28:52.03 ID:c73V3zd5.net
>>141
Windowsもコマンドプロンプトにフォルダをドロップすると
フルパスが入力されるので>>143と同じようなことができる

Rubyスクリプトを置くディレクトリで開くコマンドプロンプトの
ショートカットを作るとか、バッチでディレクトリ移動するという
手もある

147 :デフォルトの名無しさん:2014/07/25(金) 11:39:04.68 ID:3IqFdEs5.net
俺はcmd起動するときの最初のパスが既にソースコードまとめてあるディレクトリになってる
言語問わずそこで作業
ちゃんと開発する時は普通に別ディレクトリで

148 :デフォルトの名無しさん:2014/07/25(金) 12:14:05.15 ID:Yo6Sfo//.net
>>141
最近のウィンドウズ知らないけどコマンドプロンプトが
「処理終了したら閉じる」という設定になっているのでは?
閉じる設定でなければ毎回cdしなくてもいけるんじゃないかな

149 :デフォルトの名無しさん:2014/07/25(金) 12:18:27.19 ID:WLh8J9pC.net
ダブルクリックしてるの鴨試練

150 :デフォルトの名無しさん:2014/07/25(金) 12:37:18.84 ID:LKOgwVhO.net
使ってるエディタからコマンドプロンプトを起動すれば
編集中のファイルのパスを作業ディレクトリとして
コマンドプロンプトを起動してくれると思う

151 :デフォルトの名無しさん:2014/07/25(金) 13:11:43.10 ID:hJipNkKC.net
Windowsなんだけどクソ便利なんだけどあまり知られていない機能なんだけど
エクスプローラで任意のフォルダ開いでのアドレスバーにcmdって打ち込むと
そのフォルダに移動した状態でコマンドプロンプトが開く

152 :デフォルトの名無しさん:2014/07/25(金) 13:13:04.77 ID:hJipNkKC.net
別にcmdに限らずパスの通ったコマンドならなんでもいけるから
直接irbとか打ち込んでもok

153 :デフォルトの名無しさん:2014/07/25(金) 13:27:45.66 ID:WLh8J9pC.net
>>151
ほんとだ
知らなかった
ありがとう
2ちゃんもたまには役に立つんだぬ

154 :デフォルトの名無しさん:2014/07/25(金) 13:29:21.50 ID:WLh8J9pC.net
>>152
そのディレクトリで管理者権限で cmd 立ち上げられませんか?

155 :デフォルトの名無しさん:2014/07/25(金) 13:29:59.63 ID:WLh8J9pC.net
ctrl+enter でもなんか起きるな

156 :デフォルトの名無しさん:2014/07/25(金) 13:31:44.65 ID:WLh8J9pC.net
ruby と撃ち込んで ctrl+enter

157 :デフォルトの名無しさん:2014/07/25(金) 13:39:26.35 ID:mmV7Js8i.net
MAKEFILEのあるフォルダで make とか打つとかっこいいな

158 :デフォルトの名無しさん:2014/07/25(金) 13:48:34.63 ID:WLh8J9pC.net
pythonw は何も起きない

159 :デフォルトの名無しさん:2014/07/25(金) 13:49:32.42 ID:WLh8J9pC.net
git push とかも可能か

160 :デフォルトの名無しさん:2014/07/25(金) 14:46:56.21 ID:9RAl771B.net
うんち

161 :片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 :2014/07/25(金) 16:01:49.83 ID:Snct3h9B.net
def f a,b
a = b
end

x = 1
y = 2
f x,y
p x,y #=>1,2

関数fの中でxを書き換えたいんだが、どうすんねん?

162 :デフォルトの名無しさん:2014/07/25(金) 16:55:52.79 ID:5HeCUYeT.net
>>161
・配列に入れて渡し、配列を書き換える
・インスタンス変数ならば、オブジェクトごと渡して変更メソッドを呼ばせる
・そのメソッドがその場でしか使わないのであれば、ブロックにして外の変数を書き換える(ブロック突入前に存在しなければ初期値を入れておく)
・変更するくらいなら、戻り値として返す

Cと違って、多重代入もあるし配列だってHashだって戻せるんだから
無理して書き換える必要性は無く、返せば良いと思うぞ

163 :123:2014/07/25(金) 18:20:34.37 ID:7iMP+P1B.net
>>124-126
A(){
 変数a
 return B(){}
}

結局、クロージャ・ラムダ・匿名クラスなどは、
色々難しい名前を付けたが、クラスなんだよな

クラスAには、メンバ変数a, メンバ関数Bがあるだけ

164 :デフォルトの名無しさん:2014/07/26(土) 02:02:24.33 ID:8QVtVKLI.net
ジャン・クロード・バンダム?(難聴

165 :デフォルトの名無しさん:2014/07/26(土) 02:46:01.98 ID:zIbYZCVC.net
rubyとrubywのどちらで起動されたかをスクリプト側から判断するのってどうやるの?

166 :デフォルトの名無しさん:2014/07/26(土) 03:08:33.22 ID:2fRRiDMt.net
argv[0]

167 :デフォルトの名無しさん:2014/07/26(土) 17:21:34.64 ID:L52INrm9.net
Windows限定の話か?なら
WindowsAPIのGetModuleFilenameを叩くのが一番確実だ。

168 :デフォルトの名無しさん:2014/07/26(土) 18:07:18.57 ID:2fRRiDMt.net
驚き最小の法則ω

169 :デフォルトの名無しさん:2014/07/26(土) 22:26:20.20 ID:c/LX3X4p.net
Rubyは例外的なルールや非直感的な制限がとても多く、
驚き最小の原則なるものとは真逆を行く言語だよ
驚き最小ってPythonみたいなののことを言うんだよ

170 :デフォルトの名無しさん:2014/07/26(土) 22:40:13.26 ID:+1COesfI.net
>>169

>>58

171 :デフォルトの名無しさん:2014/07/27(日) 01:09:12.69 ID:YDU+iIQK.net
つーか驚き最小の法則なんてもう何年も使われていないし

172 :デフォルトの名無しさん:2014/07/27(日) 01:13:04.51 ID:yFRKgWmm.net
二重の意味で頓珍漢な発言してて>>169ってほんと恥ずかしいな

173 :デフォルトの名無しさん:2014/07/27(日) 13:35:49.37 ID:UMDAGQ8D.net
                         /       \
                       /     _    _ ',
                        _|     / ・ ヽ /・ ヽi
                        {       し―J し‐ J|
                        >‐ 、 「 ̄匚} ̄匚lい
             ,  -―‐< ̄ ̄ ̄ ̄\____    } }
            / ̄ ̄\___ `ヽ   /´  ハ   \//
          /         `ヽ |    |ニニニニ ′
            |    y         | |___j⌒ヽ
            |    |         7 |____/厶ノ
          \  ヘ         L ∧_/
.             ヽ  ヽ       l_/
               ハ   ',     |`ヽ
          (__}__レ ――┴ァ′
.            Y⌒V⌒ヾヽ ー-|
            ! !   | { ー}
.            ヽ_ヽ_ヽ_〉‐''´

174 :デフォルトの名無しさん:2014/07/30(水) 21:35:33.47 ID:ucnjA6/+.net
・Pythonを書き始める前に見るべきTips - Qiita
  http://qiita.com/icoxfog417/items/e8f97a6acad07903b5b0
  Pythonは何かとトラップが多い言語で、
  引っかかるとなんてゴミ言語と感じてしまうことが少なからずある

要するに Python への批判記事である訳だけど、
この記事の視点を Ruby に当てはめてみよう

・ファイルのエンコードを宣言する必要がある
 Ruby => Ruby 1.9 でこのゴミ仕様が取り込まれて危うかったけど、
  Ruby 2.0 ではデフォが UTF-8(Unicode) になってゴミを排除できた

・文字列には通常の文字列とユニコード文字列がある
 Ruby => Ruby では最初から(少なくとも Ruby 1.4 の時代から)一般的な文字列は
  多言語化に対応した String クラス、ただ一つだけしか存在していません

・割り算の結果がfloat型にならない
 Ruby => 「強い型付け」による動的型付け言語である Ruby からすれば、
  この指摘そのものが規約違反であって、1 / 3 は 0 で 3 / 2 は 1 になるのが自然であり、
  もしfloat型が必要であれば、たとえば 1.to_f / 3 のように明示的に型変換すべきと考えます

  おそらく著者は「弱い型付け」による動的型付け言語である JavaScript の経験が
  長いのでこのような不満を感じたのでしょう、JavaScript は Python 3 と同じ結果になります
    js> 1/3
    0.3333333333333333
    js> 3/2
    1.5
  そして、Python 3 は「弱い型付け」に向かって変化したのですから、
  次の Python 4 では、おそらく以下のような実行結果へと仕様改訂されることでしょう(棒
    >>> "A"+1
    'A1'
(長いので、一旦ここで切る)

175 :デフォルトの名無しさん:2014/07/30(水) 21:54:15.22 ID:cG7xMHTs.net
それ書いた人の「強い型付け」「弱い型付け」の定義が間違ってる

176 :デフォルトの名無しさん:2014/07/30(水) 22:17:39.92 ID:+YSZmqYf.net
演算子を適用した結果の型がどうなるかは演算子の仕様の問題に過ぎず
型付けの強い弱いは関係ない
演算の自動リフトや型変換なんてC系の言語では普通にあることで
動的型言語ではそのルールの適用をコンパイル時ではなく実行時の型に応じて動的に行ってるだけ
また、JavaScriptに整数型は仕様上ない

177 :デフォルトの名無しさん:2014/07/30(水) 22:45:41.48 ID:+YSZmqYf.net
演算による自動型変換が問題になりうるのは、次の両方を満たす場合だ。
・オペランドや結果の型が静的に決まらない
・オペランドの型によって演算子の意味が変わる
例えば、JavaScriptは実行してみなければ+が加算になるのか文字列連結になるのか分からないでしょ。
そういう性質を便宜的に「型付けが弱い」と表現することがある。
その観点では1.0/3と1/3で結果が同じになるPython3の仕様の方が「型付けが強い」と考えることもできる。

178 :デフォルトの名無しさん:2014/07/30(水) 23:33:27.95 ID:cG7xMHTs.net
> 便宜的に「型付けが弱い」と表現することがある。

ない。きちんと意味が定義されてる言葉を俺様意味付けして使うな。

> その観点では1.0/3と1/3で結果が同じになるPython3の仕様の方が「型付けが強い」と考えることもできる。

デタラメな足場の上からの観点ですね。

179 :デフォルトの名無しさん:2014/07/30(水) 23:43:44.39 ID:ucnjA6/+.net
・新スタイルクラスと旧スタイルクラスがある
 Ruby => CLOS や Smalltalk と同様な動的型付け/動的メソッド束縛方式の
  オブジェクト指向言語として設計されたRubyのクラス定義スタイルは、
  最初から(少なくとも Ruby 1.4 の時代から)変更がありません

  Python に関しては、もともと手続き型言語として設計されたものに後から
  オブジェクト指向を付け足す際、開発チームの「オブジェクト指向への理解不足」によって
  静的型付け/静的メソッド束縛言語のオブジェクト指向を導入したという「過ち」がありました
  結果として、リフレクションを多用する最近のメタプログラミング・スタイルに追従できず、
  旧スタイルを排除して新スタイルに「改めざるをえなかった」のだと思われます

・コンストラクタ(と思われるもの)が2つある
 Ruby => 最初からオブジェクト指向言語として設計された Ruby では、
  コンストラクタは Class.new、イニシャライザは Object#initialize と
  明確に区別されていますから、「可読性に劣る Python 」のような混乱はありません

・PrivateやProtectedがない
 Ruby => Ruby にはメソッドの可視性を指定する private や protected があります
  (ただし、個人的にはこれら可視性を宣言するよりも、public メソッドの名前の
   前(または前後に) '_' あるいは '__' を付けるスタイルを好みます )
  また Ruby には名前の先頭に付ける '_' や '__' について、言語としての「強制」は無く、
  命名スタイルはプログラマの判断に委ねられています

・メソッドの第一引数が予約されている
 Ruby ==> 最初からオブジェクト指向言語としている Ruby では、(コードが self だらけに
  なってしまう)「Python のような冗長で可読性に劣る規約の強制」はありません
  Smalltalk と同様に、メソッド呼び出し先として自身を「明示したい時にだけ」
  疑似変数 self を、親クラスを「明示したい時にだけ」疑似変数 super を書くだけです

(まだ続くが、次で終わる予定)

180 :173:2014/07/30(水) 23:55:37.21 ID:ucnjA6/+.net
書き忘れたけど、>>179>>174 の続きです

181 :デフォルトの名無しさん:2014/07/31(木) 00:06:25.30 ID:I9wcB7pD.net
何でRubyで可視性使わないんだ?
擬似privateで実質protectedの特殊形、なprivateはともかく
protectedとpublicは普通に使うと思うんだが…

182 :デフォルトの名無しさん:2014/07/31(木) 00:41:24.92 ID:IjpkEocs.net
>>181
これがやってること見ればわかるだろ、愚問

183 :173:2014/07/31(木) 01:25:29.27 ID:h0+6R2oI.net
>>179 の続き)
・メソッドのオーバーロードができない
 Ruby => (Python や JavaScript と同様に)動的型付け言語である Ruby では、
  引数のデータ型を実行時に判別(イントロスペクション)できるので、
  メソッドのオーバロード(多重定義)は「必須ではない」と思います

・ファイルで名称空間が切られる
 Ruby => Ruby ではモジュール宣言を使って名前空間が切られますから、
  ファイルと名前空間との一致という「規則を強制する Python」とは異なり、
  名前空間というプログラムの階層的な論理構造と、ファイル/ディレクトリという
  プログラムの階層的な物理構造をプログラマが自由自在に表現できます

・for文にindexがない
 Ruby => これも >>174 にある「割り算の結果」の項目と同様に、著者がC言語風の
  indexを伴うfor文がある JavaScript の経験が長いので、不満に感じるのだと思われます
  Ruby だと、index を伴う反復を以下のように書きます
    list.each_with_index do |index, value|
      puts "index:" + index.to_s
    end
  また Ruby 1.9 からは Enumerator オブジェクトとメソッド with_index が追加されたので、
  関数型プログラミングのスタイルでコードを書くこともできるようになりました
    puts list.each.with_index.map { |index, value| "index:" + index.to_s }

・配列/リストの長さはlenでとる
 Ruby => 最初からオブジェクト指向言語として設計されているので、
  配列の長さを求めるにはメソッド Array#length を使って list.length と書けます
  これについては、すでに >>58 で解説しているので、ここでの詳細は省略します

(これで終わり、ここまでの連投カキコに対するレスは、明日になる)

184 :デフォルトの名無しさん:2014/07/31(木) 01:33:39.66 ID:YSTj81JP.net
Rubyのアクセス制御は継承が絡まないから考え方がシンプルだと思うけどな

185 :173:2014/07/31(木) 21:19:14.83 ID:h0+6R2oI.net
>>175
間違っていると思うなら、具体的な説明を
感情的な反発だけでは、自ら敗北を認めたのと同じ

186 :173:2014/07/31(木) 21:59:08.98 ID:h0+6R2oI.net
>>176
まず「JavaScriptに整数型は仕様上ない」という指摘は正しい
(ボケへの的確なツッコミが嬉しい)
ただし、それ以外の部分はメチャクチャだね

> 演算子を適用した結果の型がどうなるかは演算子の仕様の問題に過ぎず
> 型付けの強い弱いは関係ない

演算子(= 関数 or メソッド)の適用結果のデータ型が曖昧である事を許容する言語は、
曖昧なデータ型を禁止する言語と比較して「型付けが弱い」と呼ばれる

たとえばC言語では戻り値が「ある(オブジェクトへのポインタ) または NULL」という仕様の
関数定義を許すけど、ML や Haskell のような型付けに厳格な言語では型エラーとして
定義できず、代わりに直和型(ML ならOption型、Haskell ならばMaybe型)を使う
この対比のケースだと、C は ML や Haskell よりも「型付けが弱い」となる

つまり、データ型に関する仕様の曖昧さを認めるか否かという言語の設計方針は、
「型付けの強さ弱さ」を決める要因の一つである、ってこと

> 演算の自動リフトや型変換なんてC系の言語では普通にあることで

そういった「暗黙の型変換(implicit conversion)」あるいは「型強制(coercion)」と
呼ばれる仕掛けはプログラミングを楽にする効果がある一方で、
その多用は型検査の能力を阻害する悪影響がある
だから、それらを許可しない型付けに厳格な言語との対比として、
C言語系は「型付けが弱い」と呼ばれる

187 :173:2014/07/31(木) 22:43:50.19 ID:h0+6R2oI.net
>>177
>演算による自動型変換が問題になりうるのは、次の両方を満たす場合だ。

発想の方向性は正しいと思うから、思考をもう一歩先に進めよう
言い換えると、「型が静的に決まらない」や「型によって演算子の意味が変わる」といった
要因は、どのような効果を導くのか?を考えてみよう、ってこと

その答えは、プログラマの(データ型に関する)誤り(=エラー)を見逃す可能性を増やす、
簡潔に言えば「型検査の能力を阻害する」ってこと
たとえば JavaScript のコード "A"+1 は、プログラマが "A1" が返る事を意図していたなら
正当で簡潔なコードだけど、もしもうっかり "1" をタイプミスしたとしたら
JavaScript処理系はミスの検出を見逃して最終的に予期しないバグとなる可能性がある

この「プログラマの表現力への制約を極力減らしつつ強力な型検査能力を提供する」ことは、
型体系(type system)の研究における重要な動機の一つになっている

> その観点では1.0/3と1/3で結果が同じになるPython3の仕様の方が
>「型付けが強い」と考えることもできる。

上で述べたように、型付けの強さ弱さとは、一般には型検査能力の程度を指す
(ただし「型検査」そのものが広い概念を指す曖昧な言葉であることに注意が必要)
このような「1.0/3と1/3で結果が同じになる」という、計算結果の同値性が
型付けの強さ弱さを決めるなどという珍説は、これまで見たことも聞いたことも無い

型付けの強さ弱さに関しては、Wikipedia に良くまとめてあるので、勉強されることを勧める
・Strong and weak typing - Wikipedia, the free encyclopedia
 http://en.wikipedia.org/wiki/Strong_and_weak_typing

188 :デフォルトの名無しさん:2014/07/31(木) 23:09:22.53 ID:cjUptmKw.net
Javaなどの静的言語では一般的な"A"+1がRubyやPythonでなぜ許されないのかわかってる?
実行時まで動作や結果の型が決まらない曖昧さを避けるためだよ。
静的言語では曖昧さは残らないから問題ないわけ。
結果の型が曖昧であることをなるべく許容しないのであれば
「動的言語なら」/演算子は常にfloatを返す仕様の方が曖昧さは少ないだろう。

189 :173:2014/07/31(木) 23:18:05.47 ID:h0+6R2oI.net
>>181
おそらくコードの可読性というか視認性が要因だろね
メソッド名の頭に '_' または '__' が付いていれば、
「それは public じゃないから触っちゃ嫌よ」あるいは
「もし使いたいなら事前に仕様を十分に確認してね」
といったコードの意図が一目でわかる

また、1つクラス定義をできるだけ小さくしようとする
小クラス主義で設計することを考えているから、
スーパクラス-サブクラス間でメソッドを介して関連し、なおかつ
そのメソッドの外部からの利用を(protectedで)禁止するのが
望ましいというケースがほとんど無い(ちょっと思いつかない)
というのも理由かもしれない

最後に、実行前に違反を検出できないアクセス制御に
いったい何の価値があるの?という率直な疑問もあったりする
これはアクセス制御という発想が全く存在しない Smalltalk の影響を
受けているからではないかと思う

とはいえ、こうして指摘される迄、何も疑問に感じていなかった訳だから、
可視性(アクセス制御)の活用も今後は見直すかもしれない

190 :187:2014/07/31(木) 23:39:16.07 ID:cjUptmKw.net
>>188はRubyが劣っていると言いたいわけじゃない。
1.0/3と1/3で結果が変わるのは多態性として考えれば当然。
この問題に限っては、Rubyは型検査の能力を犠牲にして
オブジェクト指向言語としての一貫性を重視しているということだ。>>186の理屈に従えばね。

191 :173:2014/07/31(木) 23:54:45.04 ID:h0+6R2oI.net
>>188
>結果の型が曖昧であることをなるべく許容しないのであれば
>「動的言語なら」/演算子は常にfloatを返す仕様の方が曖昧さは少ないだろう。

もしも Python 3 に「演算子の左辺の型に関わらず結果値の型は一つに決まるべき」
という設計方針/哲学があり、それを演算子 / に適用して「左辺が整数と小数の
いずれでも計算値は小数を返すのが(曖昧さが無いから)正しい」としたのなら、
その主張の正当性を認めよう
  >>> 1/2
  0.5
  >>> 1.0/2
  0.5


では次にもう一つの演算子 // について試してみよう
  >>> 1//2
  0
  >>> 1.0//2
  0.0
あれ、おかしいな?左辺の型によって戻り値が整数になったり小数になったりしている
もしかすると、Python には一貫した設計方針/哲学なんて高尚なものは存在せず、
演算子の種類によってコロコロ方針を変える(大人の汚い)やりかたが正しいと考えているのかな?

192 :173:2014/08/01(金) 00:01:31.80 ID:3wJnlar9.net
>>191
つまり >>191 を前提とすれば、
「オブジェクト指向言語ではない Python では一貫性を重視しない」
ってこと?

まあ Python の一貫性の無さは >>58 でも指摘しているし、
Python に慣れてしまうと、設計方針の一貫性なんてものは
気にすべきでは無い些細な事柄なのかもしれないね

193 :187:2014/08/01(金) 06:46:07.72 ID:J39fVXGB.net
>>191
だから言語そのものの優劣を主張してるわけじゃないって言ってるだろ煩い奴だな
元はといえば演算子の仕様一つで型付けが強い弱いだのと決め付けようとしたのは自分自身でしょ
主張の矛盾を指摘してるだけ

194 :デフォルトの名無しさん:2014/08/01(金) 07:03:34.19 ID:pb6Sjbuz.net
PythonはPEPの存在がありがたかった。
開発ポリシーやサポート期間が明文化されていないってのは
採用にあたっての大きな障害になるからな。
言語設計の些末なんぞ経営者や顧客にとっては何の魅力もない。

195 :デフォルトの名無しさん:2014/08/01(金) 07:05:32.23 ID:EwadhP/C.net
今日も暑いな

196 :デフォルトの名無しさん:2014/08/01(金) 07:11:54.53 ID:VcCQb1qo.net
うんこ我慢中
というか出そうなのに出ない

197 :デフォルトの名無しさん:2014/08/01(金) 10:29:41.65 ID:wXpsznL9.net
> 型付けの強さ弱さに関しては、Wikipedia に良くまとめてあるので、勉強されることを勧める
> ・Strong and weak typing - Wikipedia, the free encyclopedia
>  http://en.wikipedia.org/wiki/Strong_and_weak_typing

日本語版の「型システム」の記事のほうが正確に書いてあるね。
正確な定義と、編集者の主観とかによる内容が怪しげな議論が、きっちり分けてある。
そっちで正しい勉強をされることを勧める。

198 :デフォルトの名無しさん:2014/08/01(金) 15:14:38.77 ID:YS2dfwIg.net
超初心者です
OSXでdxrubyを使うためにdxruby_sdl導入したいのですが英語に疎すぎてgithubに書いてある説明がよく分かりません
少しだけでも手をお貸しください

199 :173:2014/08/01(金) 21:43:31.89 ID:3wJnlar9.net
>>190
> 1.0/3と1/3で結果が変わるのは多態性として考えれば当然。

たしかに(型付けの強弱よりも)多態性で解釈するのが、
Ruby では素直というか自然な発想ですね

しかしながら、

> この問題に限っては、Rubyは型検査の能力を犠牲にして
> オブジェクト指向言語としての一貫性を重視しているということだ。>>186の理屈に従えばね。

という箇所に関しては、結果が変わる現象を多態性で説明できてしまうのですから、
この演算子の左辺に着目するケースに限れば、
「型検査の能力を犠牲にしている」という指摘は間違いであると考えます

型検査(つまり型付けの強弱)が問題になるのは、
「1.0 / 3.0 と 1.0 / 3 で結果が同じになる」という演算子の右辺に着目するケースです
Ruby の数値系クラスでは、(単なる型判定ではなく)「型強制(coerce)アーキテクチャ」と呼ばれる
設計方針に従った一貫したインターフェイスを提供していますが、
(>>186 の最終段落で述べたように)型強制には型検査の能力を阻害する悪影響があります

したがって、もし犠牲という言葉を強調したかったのであれば、
「今回のケースは無関係であるが、1.0 / 3.0 と 1.0 / 3 で結果が同じになるケースでは、
 Rubyは型検査の能力を犠牲にして型強制の利点を重視している」という指摘が正しいと言えます

なお、型検査の能力を犠牲にしているとはいえ、「1.0 / 3.0 と 1.0 / 3 で結果が同じになる」のは
Python も同じなのですから、動的型付け言語である Ruby の設計方針としては妥当な判断でしょう

200 :173:2014/08/01(金) 21:51:58.88 ID:3wJnlar9.net
>>193
>>191 では、型付けの強弱について頓珍漢な我流解釈をしていた >>176,176 と
同一人物であると早合点し、>>191 の多態性という言葉を十分に検討しないまま
即レスしていました
冷静に考えると、ここは Ruby スレなのですから、>>191 はスレ違いなレスでした
気分を悪くさせて申し訳ありません

201 :デフォルトの名無しさん:2014/08/01(金) 22:08:57.71 ID:02heIdPz.net
rubyだと良い感じのCGUIツールないって話がスレの最初の方に書いてあったけど、
高級スクリプト言語(?)で使える、マルチプラットフォームのGUIツールキットで一番よいのはなんでそ?

202 :デフォルトの名無しさん:2014/08/01(金) 22:09:39.65 ID:3wJnlar9.net
>>198
超初心者という甘えで有識者にエスパーを期待しようとしても
ムリゲーだよ

どこがどう分からないかを説明しなければ、
誰もアドバイスできないと思う
たとえば

  「..... をしようとして ..... ではないかと考え、
   ..... という結果を期待して ..... を試してみたけど、
   ..... というエラーメッセージが返されて失敗しました」

といった文章を書いてみよう

203 :デフォルトの名無しさん:2014/08/01(金) 22:53:02.21 ID:7R/51h0c.net
>>201
gtkでいいんじゃないの。

204 :デフォルトの名無しさん:2014/08/01(金) 23:13:00.33 ID:YS2dfwIg.net
>>202
ご指摘ありがとうございます。以後気を付けます。
まずhttps://github.com/takaokouji/dxruby_sdlのREADME.mdを見ながら
ターミナルでSDLとSGEのインストール?を試みました。
SDLは問題なく完了し、次にSGEをインストールするとき8行目の[make]コマンドを実行しようとすると
fatal error: 'freetype/freetype.h' というエラーが発生しました。
なのでfreetypeというものをダウンロード?すれば良いのかと思い、
http://freetype.sourceforge.net/index2.html
ここでダウンロードしてもう一度コマンドを打ちなおしたのですが結果変わらず失敗しました。

205 :デフォルトの名無しさん:2014/08/02(土) 00:15:20.50 ID:UBZX0AEK.net
>>204
すべてをソースからビルドしようとしているみたいだけど、
普通は「パッケージ管理システム」という仕組みを利用する
OSX なら、Homebrew (または MacPorts)になる
 (1) GitHub 等で公開されるオープンソース・プロジェクトでは、
  まず最初に作者様がソースからビルドする手順を公開する
 (2) そしてプロジェクトの提供するソフトウェアに人気が出て
  インストールを試す人が増えてくると、ソースからのビルドは面倒なので
  有志の誰かさんが Homebrew のようなシステムで扱えるように
  パッケージを作って登録する
 (3) そうすると、以降はインストールを試そうとする多くの人達が幸せになる
だから、まずは Homebrew を調べて基本操作ができるようになるまで慣れるのが先決
新Mac板に Homebrew 専用スレがあるので、そちらを頼ることも考えよう

なお、"sdl sge ruby mac" でググると、こんなブログ記事が見つかった
・noanoa 日々の日記 : Mac に Ruby/SDL、rsdl、SGE を入れて、MyGame ゲームライブラリを動かす
 http://blog.livedoor.jp/noanoa07/archives/1919322.html
この記事でも Homebrew を使っている
他の記事でもいいし、とにかく作業に着手する前に
ネットで情報収集する感覚を身につけたほうがいいと思う

少なくとも FreeType は有名なライブラリなので、
Homebrew を含む大半のパッケージ管理システムでも利用できる
あと SDL と SDL周辺ライブラリも公式パッケージが利用できるみたい
そして SGE には非公式パッケージが存在するような情報があるね(->Homebrewスレへ Go!!)
 

206 :デフォルトの名無しさん:2014/08/02(土) 00:21:35.21 ID:Q0DxGqPm.net
Integer.methods.each do |name|
if name =~ /\?/
p name
end
end

Integerクラスのメソッドで?が付いている物を取り出すプログラムです。
これは配列の中で正規表現に一致するデータを取り出したいのですが。
もっとスマートに描けないでしょうか?

207 :デフォルトの名無しさん:2014/08/02(土) 00:41:59.29 ID:PqERPQ+S.net
とりあえず、なにをどう小細工しても
「コレクションを最初から最後まで見て、マッチするものをなんらかの手段でひとつずつ探している」
であることはどうにもならない
たとえなにか「カッコイイ」メソッドがあったとしても、やってることは同じである
ということで
puts Integer.methods.find_all{ |x| x =~ /\?/ }

208 :デフォルトの名無しさん:2014/08/02(土) 01:01:31.31 ID:k+09BHkd.net
キモい実装を目指すなら
p Integer.methods.select(&/\?/.method(:=~))

209 :デフォルトの名無しさん:2014/08/02(土) 01:15:53.60 ID:sO72E4hr.net
method の引数になんか泳いでて最高にキモいです(賛辞)

210 :デフォルトの名無しさん:2014/08/02(土) 01:30:11.06 ID:fLjR5gdB.net
正規表現で行頭にマッチしたいんけど、
入力文字列の改行コードが¥rとか¥nとか¥r¥nとか色々あるんだけど、
正規表現のアンカーの^って行頭にマッチすると言っても¥nで判定してるから
¥rとかでマッチしてくれないよね

改行コードのバリエーションごとの処理は自分でやらなきゃいけないの?
それとも改行コードといえば¥nがデフォとかそういうこと?

211 :デフォルトの名無しさん:2014/08/02(土) 01:48:07.49 ID:qRelH0Iu.net
fatal errorだけじゃ、原因がわからん

makeする時に、もっと詳細を表示する、
オプションを付けて、やり直せ

212 :デフォルトの名無しさん:2014/08/02(土) 02:04:35.51 ID:qRelH0Iu.net
>>210
JavaScriptの正規表現では、
改行が\r\n、\nのどちらでも結果は同じになるけど

通常は気にしなくてもいいと思う

213 :デフォルトの名無しさん:2014/08/02(土) 02:18:58.04 ID:LjQ2kKfu.net
>>203
見てみたら簡単なのはこれで大丈夫そうですね・・・
ダサいのはマルチ環境だから贅沢言えないか

214 :211:2014/08/02(土) 02:21:00.11 ID:qRelH0Iu.net
あっ、改行が\rは、Mac OS9以前だね
それは知らない

215 :デフォルトの名無しさん:2014/08/02(土) 02:58:10.97 ID:PqERPQ+S.net
>>210
改行コードではない
改行文字だ

文字だ

ただの文字だ

以上

216 :デフォルトの名無しさん:2014/08/02(土) 03:30:01.16 ID:fLjR5gdB.net
>>215
0x0Dと0x0Aって言えばよかったのかェ

217 :デフォルトの名無しさん:2014/08/02(土) 08:09:12.14 ID:gDjKnomp.net
'\r' は '\x0d' であることが保証されてるけど
'\n' は '\x0d\x0a' だったり '\x0a' だったりするのは
どうしてなぜ?

218 :デフォルトの名無しさん:2014/08/02(土) 08:11:05.08 ID:u0m+qxIa.net
>>213
よいの定義を先にはっきりしとけよ。

219 :デフォルトの名無しさん:2014/08/02(土) 08:43:56.31 ID:bMAcdfxk.net
もしかして:binmode

220 :デフォルトの名無しさん:2014/08/02(土) 11:07:24.06 ID:+3sKWHZp.net
$ ruby --version
ruby 1.9.3p545 (2014-02-24) [i386-cygwin]

の環境で

p Time.now

したときに

2014-08-02 10:51:50 +73956

と出力されます.この +73956 とは何でしょうか?
これ邪魔なので出力させたくないのですが方法はありますでしょうか?

221 :デフォルトの名無しさん:2014/08/02(土) 12:04:41.50 ID:gDjKnomp.net
microsecond

222 :デフォルトの名無しさん:2014/08/02(土) 19:14:45.58 ID:mjAOYCs+.net
>>220
Time#inspectを上書き

223 :デフォルトの名無しさん:2014/08/02(土) 21:52:37.10 ID:k+09BHkd.net
面倒でも毎回strftime呼んだほうがいい

224 :デフォルトの名無しさん:2014/08/02(土) 22:01:30.81 ID:UBZX0AEK.net
>>220
Time.now.to_s.each_char.take(19).join # 先頭から19文字だけ取り出す

>>222 の言うように inspect を上書きするなら、以下のように定義する

class Time
  def inspect
    self.to_s.each_char.take(19).join
  end
end

実行例:
irb(main):001:0> class Time; def inspect; self.to_s.each_char.take(19).join; end; end
=> :inspect
irb(main):002:0> Time.now
=> 2014-08-02 21:58:27
irb(main):011:0>

ただし標準クラスの振る舞い(仕様)を変更するのだから、
むやみに用いるべきではない

225 :デフォルトの名無しさん:2014/08/02(土) 22:06:02.20 ID:GQoYmdoX.net
こ汚ねぇと思いました

226 :デフォルトの名無しさん:2014/08/02(土) 22:12:10.95 ID:rVz3fll6.net
Ruby初心者です。一つ質問していいですか?

Rubyには、JavaでいうところのTomcatみたいな
「アプリケーションサーバー」のようなものってありますか?

227 :デフォルトの名無しさん:2014/08/02(土) 22:16:48.29 ID:GQoYmdoX.net
jrubyで使えるじゃん

228 :デフォルトの名無しさん:2014/08/02(土) 22:21:39.66 ID:rVz3fll6.net
そんなソフトがあるんですね
勉強になりました。
ありがとうございました。

229 :デフォルトの名無しさん:2014/08/02(土) 22:39:34.17 ID:UBZX0AEK.net
>>226
標準ライブラリの WEBrick を使うと、
Java でいうサーブレットは簡単に書ける
・Ruby 2.1.0 リファレンスマニュアル > ライブラリ一覧 > webrickライブラリ
 http://docs.ruby-lang.org/ja/2.1.0/library/webrick.html
リクエストされたURLに対応したファイルを読むだけの
サーブレット(ファイル・ハンドラと言う)も最初から用意されているから、
簡易Webサーバ(httpd)は超簡単に書ける

もっと手軽にWebサービスを書くのなら、
Sinatra というサードパーティ製のライブラリもある
"ruby sinatra 入門" あたりでググると解説が見つかる

なお、本格的なWebサービス開発を考えているなら、
Ruby on Rails を検討したほうがいいと思う

230 :デフォルトの名無しさん:2014/08/03(日) 06:53:33.60 ID:P9e0hA8O.net
>>206
p Integer.methods.grep(/\?/)

231 :デフォルトの名無しさん:2014/08/03(日) 09:57:56.78 ID:saA9+Ea3.net
>>220
Rubyのpはそのオブジェクトのinspectメソッドというものを呼び出している
inspectは「検査する」「(刑事などが)詳細に調べる」という意味で、
このメソッドはそのオブジェクトの内容を文字として表示するための情報源として使う
たとえばTimeオブジェクトは"2014-08-03 09:41:57 +0900"のような文字列として存在しているわけではなく、
「なんかよくわかんないけど変数とかメソッドとか入ったバイナリみたいなやつ」として存在している
これを直接画面表示しようとするとしんどいので、画面に表示するときにどう表示するかをオブジェクトのクラス製作者が適度に設定している

次、Rubyのpメソッドは前述のようにinspectを呼び出している
pメソッドはデバッグ用メソッドで、スクリプト作成中などにオブジェクトの内容を確かめるために使用される

オ ブ ジ ェ ク ト を 第 三 者 ユ ー ザ ー に 表 示 す る た め の メ ソ ッ ド で は な い

ので、もしオブジェクト内容を綺麗に表示させる必要があるのなら、
(存在すれば)整形メソッドを利用し、文字列を自前で作ってputs等を使用「しなければならない」
いまだに「pは画面表示用のメソッド」「pはputsの省略形」という解説をしてる本やサイトがあるが、燃やして捨ててしまってよい
Timeオブジェクトを特定の書式で表示したい場合は>>223

irb> puts Time.now.strftime('%Y-%m-%d %H:%M:%S')
2014-08-03 09:53:28

232 :デフォルトの名無しさん:2014/08/03(日) 14:20:20.23 ID:T59meZIw.net
ISO format って
2014-08-03T09:53:28
という風にTが入るのはなぜ?

233 :デフォルトの名無しさん:2014/08/03(日) 14:25:58.16 ID:Uv66z7PH.net
>>232
ISO8601か。数字が続くと区切りにくいし、スペースはいろんなとこで区切り記号として使われているからじゃないか。スラッシュやハイフンも日時ではいろんな使われ方してるし。

234 :デフォルトの名無しさん:2014/08/03(日) 15:04:32.71 ID:saA9+Ea3.net
>>232
プログラム的にわかりやすくてギリギリ可視性もあっていいじゃないか
ちなみにこれもエンドユーザーに直接表示することを目的とはしていない
これをそのまま見せようとするのではなく、自力でどうにかすること

235 :デフォルトの名無しさん:2014/08/03(日) 23:38:11.96 ID:PzxowcJB.net
webサービスでユーザーネームとパスワードをユーザー側にcookieみたいな感じで保存させて自動ログイン機能を実装することはできませんか?

user = "ユーザー名"
password = "パスワード"
みたいな感じで、変数の値を保存させておき次回アクセスがあったらそれを代入させるイメージです。

本来はデータベースなりに保存するのでしょうがあくまでユーザー側に保存させるようにしたいです。

236 :デフォルトの名無しさん:2014/08/04(月) 01:09:54.00 ID:VTkOlU1X.net
そういうのはセッションでやるんじゃないの

237 :デフォルトの名無しさん:2014/08/04(月) 03:21:57.60 ID:tnMe/Qjc.net
>>235
できるけど、そんなサイト行きたくない。場合によっては悪質なサイトとして晒すレベル。

238 :デフォルトの名無しさん:2014/08/04(月) 03:40:50.26 ID:Q/8i57D8.net
>>236
セッションでやってるんですけどうまく行かないんです。
有効期限も指定してて、firefoxからcookieも見れるのに何故かいつの間にかデータが読み込めなくなってるんですよ。

239 :デフォルトの名無しさん:2014/08/04(月) 03:44:49.65 ID:Q/8i57D8.net
>>237
そこまでですか…

ちなみに理由はどうしてですか
ほとんどファイルサイズないしcookieは色んな所に保存されてるから大丈夫かと思ったんですけどセキュリティ的な問題ですか?
考えてみたんですけどこれくらいしか浮かばなかったのでよければ教えて欲しいです。

240 :デフォルトの名無しさん:2014/08/04(月) 03:46:00.08 ID:hIaMhHwR.net
>>235
そのままやると問題が多すぎる。おそらく、期待としてはCookieStoreが近いと思う

241 :デフォルトの名無しさん:2014/08/04(月) 04:13:20.27 ID:vzBGIwJJ.net
OAuth2.0

242 :デフォルトの名無しさん:2014/08/04(月) 04:48:08.48 ID:tnMe/Qjc.net
>>239
セキュリティ上の問題。
それならHTTP digest認証使ったりブラウザに覚えさせた方がまだいい。
他の人が言っているのはセッションキーを使い捨てパスワードとして利用するのと同じ意味になる。
セッションジャックよりパスワードを盗まれる方が被害が大きい。

243 :219:2014/08/04(月) 17:03:31.26 ID:mXRA9UCQ.net
219です.
>>224, >>224, >>224, >>224, >>231 他皆さん
ありがとうございました.大変勉強になりました.

>>224 にある
Time.now.to_s.each_char.take(19).join # 先頭から19文字だけ取り出す

で対応することにしました.

244 :デフォルトの名無しさん:2014/08/04(月) 21:26:58.70 ID:Q/8i57D8.net
Rack::Session::Cookieというものを見つけたのでこのページを参考にしながらこんな感じにやったのですがうまく行きませんでした。

http://d.hatena.ne.jp/shokai/20110324/1300999147

#Rack::Session::Cookie有効
use Rack::Session::Cookie,
:expire_after => 60*60*24*7,
:secret => '適当な文字列'

#代入するとき
session[:user] = 'username'

#読み出すとき
if defined?(session[:user])
user = session[:user]
end

ブラウザ終了がログイン状態が切れるきっかけというわけでもなく時間が立つと切れてます。

245 :デフォルトの名無しさん:2014/08/04(月) 21:42:32.94 ID:6Tzsw3VW.net
>>243
ないわw

246 :デフォルトの名無しさん:2014/08/04(月) 23:57:26.06 ID:XPxSUeR/.net
小学生から楽しむ Rubyプログラミング
http://www.amazon.co.jp/dp/B00LUKIEGG/

247 :デフォルトの名無しさん:2014/08/05(火) 00:27:04.52 ID:Rp7Uk6zW.net
>>245
同意。あァァァんまりだァァアァ。
なんでprivateはあるのにsealedは導入しなかったruby。

248 :デフォルトの名無しさん:2014/08/05(火) 00:36:33.25 ID:mOOeWZK0.net
>privateはあるのに
ないよ
よく調べろ

249 :デフォルトの名無しさん:2014/08/05(火) 01:03:45.06 ID:52ECpDfa.net
小中学生にRuby教えて行ったらスレもこうなるっつうのはバカでもわかる
満足かね?
せめてRuby1年生は先生ごっこやめよ

250 :デフォルトの名無しさん:2014/08/05(火) 10:33:07.90 ID:xop66pug.net
>>244
それで生のCookieの値はどうなってたの?

251 :デフォルトの名無しさん:2014/08/05(火) 16:52:55.87 ID:n5rHoHG6.net
>>250
生のcookieの値というのはfirefoxの「prefenances」>「history」>「show cookie」からcookieを見た時にHostとかPathとかいくつか項目があるところのContentってところに書いてる値をそのまま書けばいいのでしょうか?


あと、他のサイトのcookieはどんな感じになってるのかと思い見てみたところHostという項目がない代わりにDomainがあるサイトがあります。
HostとDomainが両方ともあるというサイトは見かけなかったのですがこれらの違いは何なのでしょうか?

僕のサイトだとHostでした

252 :デフォルトの名無しさん:2014/08/05(火) 17:14:48.30 ID:9+BWU5QF.net
>>251
Contentとは別に有効期限ってのがないかな?その値はどうなってるのか。
その値が正しければruby(rack)というよりブラウザ側の問題では?
ブラウザのcookie保存期間の設定は正しく設定されていないとか?

253 :デフォルトの名無しさん:2014/08/05(火) 18:13:26.87 ID:n5rHoHG6.net
>>252
expiresの値は2014年09月04日 16時40分35秒になってます。
コードでも一ヶ月後に設定してたので多分有効期限の設定はうまく行ってると思います。

うまく行かない時もcookie自体は残っているので削除されてるって線は薄そうです。
とりあえず、firefoxでやってたので他のブラウザでも試してみます。
現状なんでうまく行かないのかもわからない状態なので…

254 :デフォルトの名無しさん:2014/08/05(火) 18:45:34.68 ID:9+BWU5QF.net
>>253
あら、cookie残ってるのね。
他のブラウザでも同様であればコード側に原因があるかも。
>>244にある参考ページのサンプルコードがシンプルだから、
そのコードで動作確認してみては?

255 :デフォルトの名無しさん:2014/08/06(水) 04:13:53.68 ID:/o/64fuk.net
use Rack::Session::Cookie,
:key => 'rack.session',
:domain => '.の後にdomain',
:path => '/',
:expire_after => 2592000,
:secret => '適当な文字列'

これでやったのですがうまく行きませんでした。
逆にうまく行く時はなんでうまく行くのかと思いキャッシュ消したりとかもやってみたんですが関係無いようでキャッシュを消してもcookieを読み込める時は読み込めて読み込めない時は読み込めないようです。

herokuで動かしてるのですがもしかしたらherokuの設定がうまく行ってないみたいな可能性とかはありませんか?
###### WARNING:
No Procfile detected, using the default web server (webrick)
警告出てたんですが問題なさそうだったので無視してましたし
config.ruにuse Rack::Session::Cookieを書いてるサイトもあったので僕の勝手な憶測ですが

現在のconfig.ruの中身
require './app'
run Sinatra::Application

原因自体つかめていない状態なのでそれを特定する方法の手がかりだけでも知りたいです

256 :デフォルトの名無しさん:2014/08/06(水) 04:17:39.98 ID:/o/64fuk.net
警告は
この内容のProcfileを追加したら消えました。
web: bundle exec rackup config.ru -p $PORT

257 :デフォルトの名無しさん:2014/08/06(水) 07:07:48.40 ID:9mmp63by.net
Firefoxにクッキーマネージャとか入れて確認してみるのがいいと思うな

258 :デフォルトの名無しさん:2014/08/06(水) 07:50:16.81 ID:im7I2Tzq.net
> 原因自体つかめていない状態なのでそれを特定する方法の手がかりだけでも知りたいです

herokuとかの環境の情報は始めから出した方が良いと思うよ。
あとローカル開発環境では正しい動作だったのかとか。
問題の切り分けがしづらくて遠回りしてしまう。

herokuでは「use Rack::Session::Cookie」と
「enable :sessions」を同時につかうなみたいな記事あったけど
そのあたりは大丈夫?

259 :デフォルトの名無しさん:2014/08/06(水) 12:44:14.10 ID:/o/64fuk.net
>>258
すいません。
環境等先に書いておくべきでした。

えーっと
ブラウザで動くsinatraアプリでweb apiをoauth認証をして使ってtumblr用のサイトを作っているのですがローカルだとあらかじめ入手しておいた自分用のアカウントのキーを定数でおいています。
なのでローカルだと連携アプリを許可するみたいなページを出してoauth認証させる部分を省いて開発しています。
oauth認証の過程がないのでcookieの処理もローカルのものには有りません。

herokuにあげたものがうまく動かないのはcookie周りの処理だけで他はoauth認証とcookieの処理がないローカル版と僕が見たところ同じ動きをしてると思います。

oauth認証の情報が保存されないだけでアカウントがどうこうということはないですけど、こんな状態なのでanalyticsで自分以外の人が来てないと確認しながらやっているのですがanalyticsが残すcookieはうまく動作してそうな感じです。

herokuは無料プランで、アドオンなどは入れていません。
enable :sessionsは大丈夫だと思います

260 :デフォルトの名無しさん:2014/08/06(水) 18:33:58.71 ID:vbe86AaJ.net
>>259
読み込める時と読み込めない時があるようなので
oauth認証のタイムアウトとか考えられるけど
herokuはログにエラーは出すのかね。

261 :173:2014/08/06(水) 22:43:28.11 ID:9w14YIgy.net
>>181
>>189 では、ナゼ可視性(=protected や private の宣言)を使わない
スタイルを好む(個人的な)理由を書いた
その理由の中では:
> スーパクラス-サブクラス間でメソッドを介して関連し、なおかつ
> そのメソッドの外部からの利用を(protectedで)禁止するのが
> 望ましいというケースがほとんど無い(ちょっと思いつかない)
などと書いていたけど、それが間違いだったことに気付いた

ここ数日、標準ライブラリの Ripper.lex を使って、Ruby の
ソースコード解析ツールでの利用を想定した字句解析コードを書いていたのだけど、
試しに protected と private を使ってみたところ割とイイ感じになった
どうやら可視性に関しては、自分の食わず嫌いだったらしい....
  http://play.island.ac/codepaste/code?id=1583

他人から指摘されるまで気付かなかった自分が恥ずかしいけど、
まずは指摘してくれたことに対して礼を言う、ありがとん

262 :211:2014/08/07(木) 00:41:38.32 ID:QaqdPvt4.net
>>210-216
IO(入出力)クラスによると、
Windowsで改行、\r\nを読み込むと、
Rubyインタプリタ内で、\nに変換されて、
またWindowsに出力される時に、\r\nに変換される

つまりRuby内では、\nで統一されている

263 :デフォルトの名無しさん:2014/08/07(木) 01:54:36.56 ID:UzLKIx83.net
¥r¥nが¥nで統一されてるとして
¥rはどして¥nに統一されてないのん?

264 :デフォルトの名無しさん:2014/08/07(木) 02:34:40.65 ID:EqoC26iF.net
そもそもCRLFとLFの変換ってのは元はWindows(と言うかその前身のMS-DOS)の仕様だからなあ
Unixにはそんな仕様は無い

そして、DOSにそれをする必要があったのは自身の改行がCRLFで
C言語はUnix生まれのため改行がLFだったこと
これをMSは、オープン時にテキストモードかバイナリモードかを指定させ
テキストモードならCRLFとLFを変換する、とした

どちらもCRのみ(これは昔のMacの作法)とは関係がないので何もされない

265 :デフォルトの名無しさん:2014/08/07(木) 03:05:13.96 ID:Os4j55OX.net
FTPにもテキストモードとバイナリーモードがあるしな

266 :デフォルトの名無しさん:2014/08/07(木) 04:51:50.32 ID:mGC1aKkA.net
>>257
クッキーマネージャーはアドオン名でしょうか?
使いかたは自分で調べるのでどの項目や何を見ればいいのかがわからないので良ければ教えてくださいますか?

>>260
500番エラーが出てます
dashboardは投稿一覧みたいのを表示するページでこれは失敗した時のログです。
***は伏せ字です

2014-08-06T19:20:03.092865+00:00 heroku[router]: at=info method=GET path="/dashboard" host=*** request_id=62a8b28e-c1a0-4667-9127-988f2de7f579 fwd=*** dyno=web.1 connect=2ms service=181ms status=500 bytes=1235

うまく行ったときは200番がちゃんと帰ってきてます。


そこで、試しにoauthの情報を定数でおいているローカルの方のファイルをoauthの情報を書かずに実行すると似たようなエラーが帰ってきて
NoMethodError - undefined method `[]' for nil:NilClass:
となりました

heroku logsにも似たようなものが出てたのでやはりうまいことcookeから情報が読めてないのではという気がします
2014-08-06T19:20:03.077945+00:00 app[web.1]: NoMethodError - undefined method `[]' for nil:NilClass:

案の定クッキーはfirefoxから確認できたので何が理由かはわかりませんが何らかの理由で時間が経つとcookieから情報が読めなくなるみたいです。

267 :デフォルトの名無しさん:2014/08/07(木) 05:14:08.90 ID:mGC1aKkA.net
あれ?
operaからも動作確認しようと思ってサイト開いたらどうもfirefoxとログインアカウントの情報が共有されてるみたいです。
firefoxからしかoauth認証(アカウントAで認証)してないのにoperaでも同じアカウント(アカウントAの情報)の情報で出てくる。
逆にoperaから別のアカウント(アカウントB)を認証してfirefoxで開いた時もfirefoxから許可してないのに別のアカウント(アカウントB)の情報で出てくる。

同一LAN上のタブレットから開いてもそうなりました。

意味がわからない…

268 :デフォルトの名無しさん:2014/08/07(木) 05:22:45.89 ID:mGC1aKkA.net
>>267
すいません取り乱しました

そもそも、これがセッションの正しい挙動だったんですね。
sinatraがデフォルトでセッションをクッキーに保存しているというだけで別にセッションはクッキーを使うためのものではないって解釈でいいんですかね?

269 :デフォルトの名無しさん:2014/08/07(木) 11:27:41.97 ID:qMfbyumE.net
>>266
cookieが読み込めないというより
500が帰ってきているから結果的にcookieが読み込めていないってことだよね。
firefoxでcookieが見れるというのは前回成功した時のcookieが見えているだけじゃないかな。

270 :デフォルトの名無しさん:2014/08/08(金) 00:35:31.80 ID:fc9o1pZf.net
>>268
多分解決しました。
どうもクッキーの設定とsinatraのコードそのものの両方が間違ってたみたいでsinatraのコードダメ元で変えてみたら普段ならheroku にデプロイした後は確実にエラーが出るのですがちゃんと通り、半日ほど立ちましたがさっきもログインが持続していることを確認できました。

体系的な知識がなくかなり手こずりましたが皆様のおかげで解決出来ました。

271 :デフォルトの名無しさん:2014/08/09(土) 01:57:37.69 ID:hZJQ1zja.net
セッション22

272 :デフォルトの名無しさん:2014/08/10(日) 00:10:35.94 ID:Npb/3Qru.net
突然すみません

Selenium Webdriver、chromeにて
とあるサイトの画像URLを取得、テキストに追記で書き出ししようと色々と調べたのですが全く分からず困っています。


<div class="hoge">
<img src="http://hoge.jpg" alt=""></div>

htmlは上記、xpathは/hoge/imgと仮定します


open("hoge.txt", "a"){|f|

output = driver.find_element(:xpath, '/hoge/img')

f.puts "#{output.text}"

}


のように書いてみたもののテキストに改行しか出力されない状態です

273 :デフォルトの名無しさん:2014/08/10(日) 00:30:45.65 ID:zlJil821.net
それはどうでもいい
それを書く前に15個くらいスクリプトを作ったはずだ
それは動作したのかどうか言え

もしいきなりそれを作ろうとしたのならあらゆる点で間違っている
いきなり別荘を建てようとするな
まず釘打ってみたり床で組み立ててみたり本棚作ってみたり犬小屋作ってみたりしろ
その経験はひとつも無駄にならない

274 :デフォルトの名無しさん:2014/08/10(日) 01:14:37.49 ID:Npb/3Qru.net
>>273
画面上にテキスト表示されている物はきちんと書き出されました
それで画像urlを取得しようと沢山調べ考えたんですが

今日はもう寝て先程見つけた下を参考にnokogiriにチャレンジしてみようかと
http://d.hatena.ne.jp/toyoshi/touch/20101109/1289294545

ちょっとnokogiri駆使してみたんですが上手く行かなかったような

275 :,,・´∀`・,,)っ-○○○:2014/08/10(日) 01:30:50.99 ID:ObwJkVu+.net
>>273は名言だな 基本って大事ホント

276 :デフォルトの名無しさん:2014/08/10(日) 08:37:49.11 ID:frgBbTF3.net
かーぺんた

277 :デフォルトの名無しさん:2014/08/10(日) 09:57:44.18 ID:aTEKyeJh.net
http://www.buzzword.jp/img/face10.png

278 :デフォルトの名無しさん:2014/08/10(日) 11:18:40.68 ID:TxwgTDO4.net
sublime text 3でruby使う上でやっとくべき設定やプラグイン教えて。
取り敢えずjapanize(メニュー日本語化)とConvertToUTF8(sjis文字化け対策)は入れました。

279 :デフォルトの名無しさん:2014/08/10(日) 15:06:43.67 ID:zOHM5qWJ.net
>>278
やっとくべき設定?
まずその2つをアンインストールするんだ。

280 :デフォルトの名無しさん:2014/08/10(日) 17:01:06.03 ID:DcfkR93x.net
>>278
エディタ固有の質問は専用スレあるんだから
そっちで聞いたほうがいい

281 :デフォルトの名無しさん:2014/08/12(火) 12:59:00.63 ID:nam2SDUx.net
true, false が代入されている boolean 変数 flg に対して
printf で書式指定をするには何を使うのでしょうか?つまり,
printf( "%?", flg )
の ??? には何を指定するのでしょうか?

282 :デフォルトの名無しさん:2014/08/12(火) 13:24:35.57 ID:ACV8I0vK.net
irb(main):001:0> format "%s", true
=> "true"

283 :280:2014/08/12(火) 19:19:53.75 ID:x7JUkwZI.net
>>282 できました。ありがとうございます。

284 :デフォルトの名無しさん:2014/08/12(火) 19:31:50.15 ID:PU4N0EB0.net
Javaだとインタフェースとか抽象メソッドで「継承する時はこのメソッドを実装してね」って明示できるけど
Rubyでそう言う事したい場合ってドキュメントでカバーするの?
「ポリモーフィズムしたいからこのメソッドはもっとけ」みたいなの

285 :,,・´∀`・,,)っ-○○○:2014/08/12(火) 20:28:53.57 ID:fcVldYYC.net
そういうお堅い言語じゃない。
実行中にメソッド追加したり削除したりできるくらいだから当然
言語レベルとしてはない。

だがやれんこともない。
http://qiita.com/akisute3@github/items/66bf766166eda2b84a03

Rails的にはテストコードでカバーかね
メソッドが定義されているかはdefined?で確認することができる。

286 :デフォルトの名無しさん:2014/08/12(火) 22:29:22.75 ID:NtdaG8qe.net
>>284
上書きしないと例外投げるだけのメソッド作っとく。

287 :デフォルトの名無しさん:2014/08/12(火) 23:31:37.25 ID:kLOI0Uws.net
>「継承する時はこのメソッドを実装してね」
その考え方がキモい、ということにはなってる

いや常識的に考えて○○ができなきゃオブジェクト指向じゃないだろ、というものの大半は
単に特定の言語、ぶっちゃけJavaとC++、のローカル仕様だったりする
RubyでJavaをやるのはやめようぜ、Rubyなんだし

288 :デフォルトの名無しさん:2014/08/12(火) 23:41:51.41 ID:x9ZUxVMu.net
動的言語なんだから実行時にエラー出しときゃいいんだよ。

289 :デフォルトの名無しさん:2014/08/12(火) 23:51:26.48 ID:okDd+6G6.net
その考え方はもう古い
スクリプトといえども型名等明示できるものは明示できるようにして
ヒューマンエラーを未然に防げるようにしておくのがトレンド
というわけでRuby3はその方向に進化してくれ

290 :デフォルトの名無しさん:2014/08/13(水) 00:23:51.87 ID:KN2EsXN5.net
>>287
残念だけど、「その考え方」は Smalltalk の時代から「よくある言い方」、
いわゆる「イディオム」の一つとして普通に存在している
ちなみに Smalltalk では、>>287 の表現を借りると:

 上書きしないと subclassResponsibility メッセージを
 投げるだけのメソッド作っとく。

になり、これを Ruby で言い直せば:

 上書きしないと例外 SubclassResponsibility を
 発生させる(raise する)だけのメソッド作っとく。

になる

さて >>287 に限らず、C++/Java のような静的OOPしか知らない人が
「OO設計の概念は C++/Java から生まれた」みたいな
硬直した発想をしがちなのはナゼなんだろうか?

291 :デフォルトの名無しさん:2014/08/13(水) 01:06:25.32 ID:OCtuWZt1.net
いろんなスレで無理やりSmalltalkの話題切り出すのやめてくれ
まじでうっとおしい

292 :デフォルトの名無しさん:2014/08/13(水) 01:09:46.40 ID:lr+rlGxM.net
>>290
被害妄想じゃない?
286のレスからはそうは読み取れないな
硬直した発想だとか言うけど
起源主張して褒められたいという発想自体が
まさにソレじゃね

293 :デフォルトの名無しさん:2014/08/13(水) 01:11:07.57 ID:TCL9mbxJ.net
>>290
僕が初めてオブジェクト志向言語を触ったのはjava/c++だったから! って人が多いから。
Ruby なら、そういう用途に使うために NotImplementedError が組み込みであるから、それを使ってくれというのが言語としてのスタンスってだけの話だと思う。

294 :デフォルトの名無しさん:2014/08/13(水) 01:16:16.87 ID:0XAF0Eso.net
どんな言語だろうと自分の開発手法に足りないものがあったら、実現手段を考えるだけ。

295 :,,・´∀`・,,)っ-○○○:2014/08/13(水) 01:34:10.05 ID:K9qjufdc.net
method_missing + eval

296 :289:2014/08/13(水) 02:31:29.89 ID:KN2EsXN5.net
>>289,293
「無いのなら作ってしまえホトトギス」ということで、
属性の宣言 attr_reader 等と似た抽象メソッド宣言 abstract_method を書いてみた

 http://play.island.ac/codepaste/code?id=1586

abstract_method の使い方は:
・attr_reader 等と同様に、クラス定義内で abstract_method を呼ぶ
・引数は、メソッド名をキー、メソッド引数の個数を値とするハッシュを渡す
・例:abstract_method :foo => 1 # 抽象メソッド foo を宣言


>>291
わざわざ動的OOP言語である Ruby スレで C++/Java との話題を切り出す、
しかも無知に起因すると思われる間違った情報(>>287)をまき散らすのも勘弁願いたい

297 :289:2014/08/13(水) 02:43:24.62 ID:KN2EsXN5.net
>>296 のコードについて、94行目から間違いがあったので訂正

・訂正前
 94 # 具象メソッド
 95 def foo(message)
 96   format "I am a %s.", self.class
 97 end

・訂正後
 94 # 具象メソッドを利用するメソッド
 95 def foo(message)
 96   format "I am a %s.", message
 97 end

訂正した結果として、実行例も "I am a FOO." になる

298 :289:2014/08/13(水) 03:01:19.57 ID:KN2EsXN5.net
>>292
抽象クラス/抽象メソッドという概念を使いたくない、という
主張だけなら、特に気にしなかった
個人のプログラミングスタイルなんだから他人がとやかく言うべきじゃないし、
Ruby はそういった(良い意味で「お気楽な」)スタイルも許容する認める言語だから

でも >>287 は自分の主張を周囲に押しつけようとし、
しかもその主張の根拠「JavaとC++、のローカル仕様」が間違っているから
厳しい口調になった

言いたかったのは、それだけだ

299 :デフォルトの名無しさん:2014/08/13(水) 04:30:45.53 ID:lr+rlGxM.net
>>298
面白いなw
> 自分の主張を周囲に押しつけようとし
ってのがまさに
> 「継承する時はこのメソッドを実装してね」
これじゃないか。
普通に読み取れば
言語ごとに色が有るんだから
多様性を楽しもうぜってのが286のレスでしょ。
どう読み取ればそうなるんだよ

300 :,,・´∀`・,,)っ-○○○:2014/08/13(水) 07:57:49.27 ID:K9qjufdc.net
大ヒント

class Parent
 def self.inherited(child)
  child.class_eval do
    # ここでなんか処理
  end
 end
end

C++やJavaで純粋仮想関数使いたい意図はわかるが
「ヒャッハー!コンパイル通さないぜ!」やるだけでOO設計やった
気になるのはいかがなものかと。

  return 0;

やるだけの関数定義してもシンボル名さえあってれば通っちゃうわけだよね。
お前それでいいのか?

301 :289:2014/08/13(水) 11:44:01.65 ID:KN2EsXN5.net
>>287 の真意はカキコした本人にしか分からないから横に置くとしても、
たしかに面白いな

・Enumerable モジュールを include する時はメソッド each を実装してね
・Comparable モジュールを include する時はメソッド <=> を実装してね
・あるクラスをハッシュのキーとして扱う時はメソッド eql? と hash を実装してね
・AcriveRecord::Base を継承する時は、DB上に同名のテーブルを定義し、
 type というカラムを設けてね

Ruby プログラミングではありふれた決まり事のいくつかだけど、
これらも >>299 には「おしつけ」になるんだろうなぁ.....
うん、たしかに面白い

302 :デフォルトの名無しさん:2014/08/13(水) 13:03:40.66 ID:XU9wPxJn.net
>>281
flg=true;flg.to_s

303 :デフォルトの名無しさん:2014/08/13(水) 13:33:34.15 ID:TBkS3gli.net
foo:true ←よい
foo:1 ←よい
foo:'bar' ←よい

foo: :bar ←なんかださい

304 :デフォルトの名無しさん:2014/08/13(水) 14:47:53.87 ID:s6AcBQ2c.net
library yamlについて質問です。
YAML.dumpで書き出したときに先頭がマルチバイト文字
だと自動的に""で囲まれるようですがこれは確定した仕様なんでしょうか?
ドキュメントに一切記述がなくて不安です。

305 :デフォルトの名無しさん:2014/08/13(水) 15:06:48.24 ID:KN2EsXN5.net
>>304
この話かな?

・Ruby1.9.2で日本語を含むYAMLを出力する時、バイナリ文字列化されないようにする
 http://keijinsonyaban.blogspot.jp/2010/10/ruby192yaml.html

306 :280:2014/08/13(水) 15:38:20.34 ID:hIUx5GQv.net
>>302 さんくす。

307 :303:2014/08/13(水) 16:32:59.37 ID:s6AcBQ2c.net
>>305
そんな感じです。こちらの環境はwindows版2.0でPsychも有効になっているようですが
require 'yaml'
jp = 'あいうえお'
puts(YAML.dump(jp))
#--- "あいうえお"
en = 'abcde'
puts(YAML.dump(en))
#--- abcde
#...
となって日本語のほうだけダブルクォーテーションで囲まれてしまいます。
確定した仕様なら大した問題はないのですがいろいろ調べてると2,3年混乱
が続いたライブラリのようで不安になってきました。使わないほうがいいのでしょうか?

308 :デフォルトの名無しさん:2014/08/13(水) 16:45:24.76 ID:9nXT2NBI.net
君子危うきに近寄らず

309 :289:2014/08/13(水) 21:39:49.42 ID:KN2EsXN5.net
>>296-296 の抽象メソッド宣言コードについて、これの具体的な
使用例として「2次元クラフィック向けの四角形クラス」を書いてみた

 http://play.island.ac/codepaste/code?id=1587

これは姉妹スレ「Rubyについて Part49」の #771,772-774 で書いていた
コードを改造母体にして、抽象メソッド宣言やその他の変更を加えたものです
参考まで

310 :289:2014/08/13(水) 22:40:38.72 ID:KN2EsXN5.net
Ruby における抽象クラス/抽象メソッドの話題はググるといくつか見つかる
今さら調べてみると、海外でも似たような議論をしている

・Abstract Method in Ruby - Stack Overflow
 http://stackoverflow.com/questions/6792428/abstract-method-in-ruby

 ここでも基本は「具象クラスで抽象メソッドが未定義であれば例外を投げる」だけど、
 >>290 と同様に Smalltalk ではそれを SubclassResponsibility と呼ぶという
 レスが付き、それと類似のコードが提案されている

また、>>296 では抽象メソッド宣言コードを自作してみたけど、
同じ事を考えていた人は海外にもいた

・Creating an Abstract Method | zenspider.com
 http://www.zenspider.com/Languages/Ruby/Cookbook/ClassesAndObjects/AbstractMethod.html

 >>296 では組込みクラス Module に宣言メソッドを追加していたけど、
 こちらの実装では宣言クラス Abstract を定義しクラスメソッド Abstract.method として
 抽象メソッドを宣言する API 仕様になっているみたいだ
 例えば、任意のクラス定義内で Abstract.method :foo と書く

311 :デフォルトの名無しさん:2014/08/13(水) 22:54:28.35 ID:KN2EsXN5.net
>>307
YAML は使ったことがないのでよく分からんけど、
公式仕様書では最初のドラフト版である 1.0 の時点で
ダブルクォーテーションで囲まれた文字列が定義され、
最新版の 1.2 でも仕様定義に変更はなく安定しているみたいだね
・YAML&#xA0;Ain’t&#xA0;Markup&#xA0;Language&#xA0;(YAML) Version&#xA0;1.2
 http://yaml.org/spec/1.2/spec.html#id2760844
 この仕様書の例 "Example 2.17. Quoted Scalars" が該当する箇所

後はライブラリにおける仕様の実装品質を検討することになる
・もし品質が保証された他の手段(他のYAML実装やJSON/XML仕様)が
 存在しているなら採用を検討する、あるいは
・とりあえず何か問題が起こるまでは標準ライブラリの利用を継続する

ぶっちゃけた話、どちらを選ぶのが適切かはケースバイケースだから、
後は >>307 自ら最終判断を下すしかないと思う

312 :デフォルトの名無しさん:2014/08/14(木) 03:58:05.93 ID:+2zwhmMM.net
馬鹿には無理

313 :デフォルトの名無しさん:2014/08/14(木) 07:51:44.38 ID:/Ffu3gb/.net
ふぇぇ・・・

314 :デフォルトの名無しさん:2014/08/15(金) 04:49:13.30 ID:MB8edIwX.net
URI.parse('file://foo.txt').open
ってできなくて不便なんすけど
ruby2.1でもまだfileに対応してないんスね

315 :デフォルトの名無しさん:2014/08/15(金) 05:36:59.12 ID:5MJoVvaB.net
>> "a\nb\nc\n".split("\n")
=> ["a", "b", "c"]
>> "a\nb\nc\n".split("\n"){|i| puts i}
=> ["a", "b", "c"]
>> "a\nb\nc\n".split("\n").each{|i| puts i}
a
b
c
=> ["a", "b", "c"]
>>

2行目のeachつけ忘れでエラーでないんだけど
Arrayに直接ブロックをぶら下げると何が起こるの?

316 :デフォルトの名無しさん:2014/08/15(金) 06:18:06.78 ID:11xv4jXV.net
その二番目の例で split は渡されたブロックを処理せずに単に捨ててる

317 :デフォルトの名無しさん:2014/08/15(金) 08:26:41.72 ID:2ipN4K8/.net
「ブロック処理は定義されていませんエラー」というのはRubyのデフォルトにはない
irb> 'abc'.upcase
=> "ABC"
irb> 'abc'.upcase{|x| foo}
=> "ABC"

318 :デフォルトの名無しさん:2014/08/16(土) 18:49:31.04 ID:ur+z2lZs.net
Programming Ruby 1.9&2.0 の翻訳本は出ないのかな?
原書は2013年5月に出版されたようだけど。

319 :デフォルトの名無しさん:2014/08/16(土) 19:08:17.04 ID:pCqm9jUF.net
Programming Ruby 2.1 が出版されてから
翻訳を検討し始めるのではないかと思われ

Ruby 2.2 リリースとの熾烈な競争になるなぁ(棒

320 :デフォルトの名無しさん:2014/08/16(土) 19:14:06.94 ID:jGqbtnFx.net
翻訳版といら要らんよね

321 :デフォルトの名無しさん:2014/08/16(土) 21:15:40.19 ID:jGqbtnFx.net
if foo = 1 || foo == 2 || foo == 3
 bar
end
をもちっとコンパクトに書けんかの

if [1, 2, 3].include?(foo)
 bar
end
だとなんかイモい

case foo
when 1, 2, 3
 bar
end
もなんかイモい

if foo is 1 || 2 || 3
 bar
end
とかかけたらな

322 :デフォルトの名無しさん:2014/08/16(土) 21:43:07.02 ID:pCqm9jUF.net
>>321
コードの可読性が数学における表記法との類似性を指すのであれば:
>> if [1, 2, 3].include?(foo)
が最も類似していると思う

もしコンパクトさを最重要視したいのなら、
Ruby では識別子に UTF-8 文字が利用できるから、
以下のコードを書けばいい

irb(main):001:0> module Enumerable; alias ∈ include?; end
=> nil
irb(main):002:0> [1, 2, 3].∈ 2
=> true
irb(main):003:0> [1, 2, 3].∈ 4
=> false
irb(main):004:0>
(2ch では「∈」という文字が化けている可能性が高いけど、
 これは「ある要素が集合に含まれているか」を表す数学の記号)

323 :デフォルトの名無しさん:2014/08/16(土) 21:51:29.58 ID:A0O6xtGz.net
>> if [1, 2, 3].include?(foo)
はRuby的ではないだろ
論理的に合っててシンプルならいいってのはPythonっぽいわ

324 :デフォルトの名無しさん:2014/08/16(土) 22:06:29.30 ID:pCqm9jUF.net
>>323
>>322 では「数学的表記との類似性」という視点でコードを示したわけで、
これが「Ruby的」とは一言も書いていない
だから一体、何に対して過敏に反応しているのか、わけがわからんな

「Ruby的」とか「Rubyっぽい」というのは、>>321 の前半3つの書き方、
そのどれでも受け入れ、その中からどれを選択するかはプログラマに
任せるという「寛容な設計哲学」にある(と、個人的には考える)

これの「Rubyらしさ」は、常にプログラマへ「論理的に合っててシンプルならいい」を
強要する Python とは対照的だね

325 :デフォルトの名無しさん:2014/08/16(土) 22:09:16.80 ID:xeQ2qkm2.net
fall throughが欲しいなぁと思うことがある

326 :デフォルトの名無しさん:2014/08/16(土) 22:13:46.44 ID:ur+z2lZs.net
>>324
もっとコードをしっかり読もうよ。
元のコードの一行目はなんか変じゃない?

327 :デフォルトの名無しさん:2014/08/16(土) 22:17:39.81 ID:pCqm9jUF.net
>>326
typo をいちいち揚げ足取りするほど野暮じゃないんで....

328 :デフォルトの名無しさん:2014/08/16(土) 22:23:52.88 ID:ur+z2lZs.net
if foo<4
bar
end
foo∈Nなら

329 :デフォルトの名無しさん:2014/08/16(土) 23:21:02.64 ID:xeQ2qkm2.net
>>323
pythonだねw

330 :デフォルトの名無しさん:2014/08/17(日) 11:50:17.42 ID:C1vhwMQl.net
こういう書き方ができないわけでもない。推奨はしないが。
class Fixnum
 def is(f)
  f.call(self)
 end
end
def one_of(*them)
 return them.first.method(:include?) if them.size == 1
 them.method(:include?)
end

foo = 5
bar if foo.is one_of 1,3,5,7
bar if foo.is one_of [1,3,5,7]
bar if foo.is one_of 1..7

331 :デフォルトの名無しさん:2014/08/17(日) 16:28:19.29 ID:v7smLqH2.net
http://guides.rubyonrails.org/active_support_core_extensions.html#in-questionmark

332 :デフォルトの名無しさん:2014/08/17(日) 18:27:16.73 ID:F9qolS48.net
ユーザーのソースコードスキャンして
100人が同じような実装書いたら自動でオリジナルに反映されるクラウド型言語にすれば
車輪の再開発も最小限に抑えられるのに

333 :デフォルトの名無しさん:2014/08/17(日) 19:21:09.40 ID:Ot0PKOG+.net
車輪の再発明がなかったらRails使ってるような人間はほとんど失業するよ

334 :デフォルトの名無しさん:2014/08/17(日) 19:51:54.11 ID:sI1u/7Zz.net
あんただけです

335 :デフォルトの名無しさん:2014/08/17(日) 20:12:47.24 ID:wn4TLg6+.net
>>332
100アカウント作る作業が捗りますね。

336 :デフォルトの名無しさん:2014/08/18(月) 18:39:08.27 ID:MNhNsEMr.net
文字列の変数に\nや\tを追加するにはどうすればいいのでしょうか?

str = String.new
str << "hello"
str << "\n"
str << "world"
p str

とやると、 "hello\nworld" が出力されてしまいます
<< の代わりに + を試してみたり、クオーテーションマークを変更してみたのですが上手く行きませんでした
ご存じの方がいらっしゃったら教えて下さい

337 :デフォルトの名無しさん:2014/08/18(月) 18:55:10.29 ID:RYTp3JkD.net
>>336
pではなくprintやputsを使う

338 :デフォルトの名無しさん:2014/08/18(月) 19:07:53.97 ID:MNhNsEMr.net
>>337
ああ、ほんとだ!
pやputs、printの微妙な違いを理解していませんでした
教えて下さりありがとうございます!

339 :デフォルトの名無しさん:2014/08/18(月) 21:43:14.89 ID:DSQRQPi5.net
正規表現について何か方法があれば教えてほしいです
文字列から以下のようにscanすると、1回目のマッチで先頭の12111を消費してしまうので
残りは2111となってマッチせず、戻り値は1要素になります
"121112111".scan(/1+21+/) #=> ["12111"]

元の文字列の中で、以下のように正規表現に当てはまるすべてのパターンを抽出したいとき
簡単にできる方法はあるでしょうか?
"121112111".??? /1+21+/ #=> ["12111","1112111"]

その後文字数を数えたりしたいので、先読みだけでは期待通りになりませんでした
"121112111".scan(/1+2(?=1+)/) #=> ["12", "1112"]

340 :デフォルトの名無しさん:2014/08/18(月) 22:12:57.28 ID:fWx8XBuA.net
>>339

irb(main):001:0> xs = "121112111"
=> "121112111"
irb(main):002:0> (0..(xs.size - 1)).map { |i| xs[i, xs.size - i].scan /1+21+/ }.flatten.uniq
=> ["12111", "1112111", "112111"]
irb(main):003:0>

341 :デフォルトの名無しさん:2014/08/18(月) 22:16:57.84 ID:8phCtYDa.net
>>339
メソッド1つでやる方法はない
ループ回してやるぐらいだろう

342 :デフォルトの名無しさん:2014/08/18(月) 22:50:50.95 ID:DSQRQPi5.net
>>340,340
ありがとうございます
やっぱり単純な方法はなさそうですね
今回に限っては以下のように対処することにしました
"121112111".gsub(/1+/){"#$& #$&"}.scan(/1+21+/)
=> ["12111", "1112111"]

343 :デフォルトの名無しさん:2014/08/18(月) 23:07:32.88 ID:kHWBbVG2.net
"121112111".scan(/(?=(1+21+))/).flatten #=> ["12111", "1112111", "112111", "12111"]

344 :デフォルトの名無しさん:2014/08/19(火) 22:06:10.54 ID:4T9lOZln.net
オンメモリで処理しきれないような大量の1と2が入り混じった
文字列を処理するお題が「次」に出るに違いない・・・そう、これは
ブラフだ。きっと010001000に置き換えてビット演算で効率のいい
アルゴリズムを考えないと解けないようにできているんだ・・・!

345 :デフォルトの名無しさん:2014/08/20(水) 23:56:22.60 ID:Hb2EFkIX.net
if !@list.nil?
 @list.each do |e|
  e.foo
 end
end
って書くののなんかダサいから、
nil.to_aで[]が返るのを使って、
@list.to_a.each do |foo|
  foo.xxx
end
ってするのはどうかな?
to_aだけだと@listがnilの可能性がある事を示せなくて紛らわしいかな?

346 :デフォルトの名無しさん:2014/08/20(水) 23:59:39.84 ID:Hb2EFkIX.net
@list.to_a.each do |e|
  e.foo
end
だった。

347 :デフォルトの名無しさん:2014/08/21(木) 00:45:52.00 ID:im1RGGTy.net
>>345
Array(@list).each

という書き方はよく使うね

348 :デフォルトの名無しさん:2014/08/21(木) 02:06:12.53 ID:x7AE9dcj.net
>>345
「引数(orインスタンス変数)は配列互換。途中でエラーになるんでよろしく」とマニュアルに太字で書いておく

いやわりとマジで
メソッドに外部から投げ入れるオブジェクトのクラスがナニかというのを徹底するのは人間の仕事

349 :デフォルトの名無しさん:2014/08/21(木) 02:08:32.65 ID:Rf32jxet.net
>>348
動的型付け言語は大変だな。

350 :デフォルトの名無しさん:2014/08/21(木) 02:18:40.09 ID:x7AE9dcj.net
まあどうあれ、あまり愉快ではない

def hoge(arg)
arg.each do |e|

と書いた時点で「いや待てよargが配列じゃなかったらどうしよう、ちょっと変わったHashの可能性もあるよな、よし対処しよう」と考え

   な い

というのは、直感やおもてなしのココロ(って何)には反する

351 :デフォルトの名無しさん:2014/08/21(木) 13:02:24.41 ID:cuQAWRrR.net
sinatra使ってます。
Postデータのエンコードとバリデーションをしたいのですが
良いライブラリはありますでしょうか

352 :デフォルトの名無しさん:2014/08/21(木) 17:35:17.83 ID:yvxtVK3I.net
>>350
その例の場合は

def hoge(*args)

にしちゃうかな、配列が複数ある場合は無理だけど…

353 :デフォルトの名無しさん:2014/08/21(木) 21:32:48.95 ID:JmIsso9r.net
>>345,345
> って書くののなんかダサいから、

どうやら Ruby の作者も「if !@list.nil?」はダサいと感じていたみたいで、
結果として「unless @list.nil?」という珍しい文法が Ruby に追加された
同様にして「while !@list.nil?」もダサいので「until @list.nil?」も追加された


> to_aだけだと@listがnilの可能性がある事を示せなくて紛らわしいかな?

@list の値が nil のケース(=リストそのものが存在していないケース)と
@listi の値が空リストであるケース、それぞれによって処理を分岐させたいのなら、
この nil.to_a というコードは問題になる

ただ、今回の例(>>345)では両者のケースに対して同じ処理を期待しているように見えるから、
たとえば:
  if (! @list.nil?) && (! @list.empty?)
あるいは:
  unless @list.nil? || @list.empty?
と書くよりも、nil.to_a のほうが好ましいと思う
(よくある言い回し、いわゆる Ruby のイディオムの一つになれる可能性がある)

354 :デフォルトの名無しさん:2014/08/22(金) 21:34:40.30 ID:QtCUYHT3.net
>>349
JavaやC#にだってぬるぽあるやん

355 :デフォルトの名無しさん:2014/08/22(金) 23:33:54.15 ID:IRypyqt/.net
非nilであることをinitializeの実装だけでは保証できないのが難しいところだ。

356 :デフォルトの名無しさん:2014/08/23(土) 00:51:47.76 ID:T0CaKeKd.net
return if @list.blank?
@list.each(&:foo)

じゃないの???

357 :デフォルトの名無しさん:2014/08/23(土) 01:34:51.41 ID:2/26ZChg.net
@list.try.each{}
が標準でできればなぁ

request for: Object#try
https://bugs.ruby-lang.org/issues/1122

358 :デフォルトの名無しさん:2014/08/23(土) 02:24:04.01 ID:WQrXNI9l.net
使いたい人は activesupport を使えばいいんだから、別にいいんじゃね?

359 :デフォルトの名無しさん:2014/08/23(土) 14:44:18.03 ID:9MV2WjBq.net
AIZU ONLINE JUDGEの0021について
以下の回答ではWrong Answerとなってしまうのですが
おかしいor考慮不足な点がなにかわかりません
わかる方ご指摘をお願いしたいです
問題文に記載されたサンプル入出力は満たしています

問題:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0021&lang=jp
Wrong Answer回答:http://ideone.com/Cl6B6n
回答の内容
2直線の傾き(i,j)を計算し一致すれば
(ただし実数なのでその差が相対誤差(大きいほう*イプシロン)、絶対誤差(イプシロン)より小さければ)
平行と判断する
(イプシロンは1e-10と置く)

360 :デフォルトの名無しさん:2014/08/23(土) 14:55:59.25 ID:WQrXNI9l.net
>>359
ゼロ除算が考慮されていない

361 :デフォルトの名無しさん:2014/08/23(土) 15:08:18.23 ID:9MV2WjBq.net
>>360
おう・・・ご指摘通りでした
0除算考慮したらAcceptされました、ありがとうございます!

誤差がおかしいのかとか難しく考えすぎてた・・・

362 :デフォルトの名無しさん:2014/08/23(土) 16:39:10.31 ID:0NcmejrN.net
a

363 :デフォルトの名無しさん:2014/08/23(土) 16:47:31.24 ID:0NcmejrN.net
http://imgur.com/UbPYGCx

rbenvでバージョン切り替えが出来ないんだけど、誰かわかる?
rbenv globalコマンドとruby -vコマンドで表示されるバージョンが違うってどゆこと?
バスの設定はしてある。
export PATH=$HOME/.rbenv/bin:$PATH
eval "$(rbenv init -)"

364 :デフォルトの名無しさん:2014/08/23(土) 17:13:00.67 ID:WQrXNI9l.net
>>363
環境変数 RBENV_VERSION かカレントディレクトリに .ruby-version があるかどっちかじゃね?

365 :デフォルトの名無しさん:2014/08/23(土) 19:35:20.67 ID:1h2qyd6w.net
rubyから.shを起動させたいのですが、どうすれば起動できますか?

366 :デフォルトの名無しさん:2014/08/23(土) 20:35:05.17 ID:WQrXNI9l.net
>>365
system

367 :デフォルトの名無しさん:2014/08/24(日) 00:11:04.95 ID:6OMWvQqo.net
>>366
result =で起動できました!

それと上で起動させたスクリプトを時間がきたら停止させるようにしたいんだけど、
resultで起動させつつその下の命令も実行させるようにってできますか?

368 :デフォルトの名無しさん:2014/08/24(日) 00:26:45.54 ID:hXFtc1r+.net
>>367
spawn 使え

369 :デフォルトの名無しさん:2014/08/24(日) 09:00:55.94 ID:/FddapLM.net
aに何か値が入ってるとして
if foo()!=0 then
a=foo()
end
をfoo()を2回呼ばずに書く方法無い?
b=foo()してbを2回使うはあるけどもっとスッキリしたので

370 :デフォルトの名無しさん:2014/08/24(日) 09:17:31.10 ID:joOkqJea.net
0!=b=foo&&a=b

371 :デフォルトの名無しさん:2014/08/24(日) 09:21:15.73 ID:joOkqJea.net
うわあ優先順位おかしかった
(b=foo)!=0&&a=b

372 :デフォルトの名無しさん:2014/08/24(日) 11:13:18.14 ID:XmfYikUF.net
foo()の戻り値が Numeric なら

 a = foo.nonzero? || a

かな

373 :デフォルトの名無しさん:2014/08/24(日) 11:17:59.94 ID:mc0xcEhs.net
>>369
a += foo

374 :デフォルトの名無しさん:2014/08/24(日) 13:24:10.87 ID:EYMdVqe7.net
西アフリカで、アウトブレイクした潜伏期間延長型エボラの死者・罹患者の数を散布図にし近似曲線を出してみたら
片対数グラフで直線だから既に指数関数的増加だった

2014年に、西アフリカでアウトブレイクした潜伏期間延長型エボラの死者は、2014年8月半ばで1000人。←今ココ
2014年12月上旬で1万人。
この時点で世界規模で空路シャットダウン開始、世界経済大混乱

2015年5月で10万人。
2015年9月で100万人。
この時点で、第二次世界大恐慌発生

2015年大晦日で1000万人。

ちなみに
http://ja.wikipedia.org/wiki/2014%E5%B9%B4%E3%81%AE%E8%A5%BF%E3%82%A2%E3%83%95%E3%83%AA%E3%82%AB%E3%82%A8%E3%83%9C%E3%83%A9%E5%A4%A7%E6%B5%81%E8%A1%8C
:カナダ保健省のサイトでは体内に数個のエボラウィルスエアロゾルが侵入しただけでも発症するとしている
:ハマダラカが、吸血したての人の新鮮血を媒介しているという学説が浮上している

エボラ出血熱は蚊やアブに刺されただけで感染する。

:「この地域には内戦、政府による搾取、テロが長い間続いており、それによって生まれた恐怖、貧困、猜疑心などがある。エボラは耐え難い騒音に付け加えられた一つのざわめきに過ぎない」
現地では

や る 気 は 皆 無

375 :デフォルトの名無しさん:2014/08/24(日) 16:21:51.74 ID:joOkqJea.net
Rubyにはjavascript,VBA,Pythonなどにあるwith構文と似た構文、もしくは別の方法はないでしょうか?
Timeクラスメソッドを何度も使う箇所があり、特定範囲だけTimeを省略できたらなあと考えています

こんな感じのことがしたい
with(Time){
a=now
b=at(gm(・・)+gm(・・)+a)
・・・
}

376 :デフォルトの名無しさん:2014/08/24(日) 17:16:02.45 ID:67kLGJdT.net
>>375
省略したいのがモジュールであれば;
  include TooLongNamedModule
によって、現在の名前空間内では TooLongNamedModule 指定が不要になる
ただし、残念ながらクラスは include できないので、省略もできない

さらに書籍「JavaScript: The Good Parts」では
with 構文が「悪いパーツ」の一つとして挙げられているように、
それら言語でも with 構文の多用はバッド・ノウハウだから避けるべき

同様に Ruby でも include 宣言は Mix-in の用途にも使われ、
コードを一見しただけでは二つの用途(=プログラマの意図)が判別できないので、
名前空間の省略を目的とした include 宣言は、できるだけ避けるべきだろう

タイプ数を減らしコードを簡潔にしたいという目的を解決する手段であれば、
Ruby では「悪いパーツ」である with 構文の代わりに、別名(シノニム)を使える
  M = TooLongNamedModule
  C = TooLongNamedClass
これで、TooLongNamedClass.method の代わりに C.method と短く書けるし、
include や with 構文のような弊害は無い(=「悪いパーツ」ではない)

なお、>>375 のコードは(モジュールあるいはクラス等の定数ではなく)変数を
省略して書けることを想定しているみたいだけど、これも Ruby では書けない
その代わり、Object#tap { |obj| .... } を使って、たとえば以下のように書ける
  T = Time
  T.now.tap do |a|
    .... # 処理時間を計測したいコード
    b = T.now
    processing_time = b - a
    ....
  end
こちらもブロック(無名クロージャ)を利用しているので、with 構文のような弊害は無い

377 :デフォルトの名無しさん:2014/08/24(日) 17:38:36.03 ID:kokV6yFV.net
>>375
Mailのnewを参考にすれば良さげだけど、
こういうことをやる汎用的なライブラリは知らない。
http://q.hatena.ne.jp/1406363383

378 :デフォルトの名無しさん:2014/08/24(日) 18:52:40.24 ID:1zGm5FNX.net
def with(obj, &blk)
obj.instance_eval(&blk)
obj
end

arr = with [] do
push 1
push 2
end

p arr #=> [1, 2]

379 :デフォルトの名無しさん:2014/08/24(日) 20:49:03.78 ID:joOkqJea.net
>>376-377
解説や参考になる例ありがとうございます
今回はその場だけでできる対処にとどめて
t=Timeとしてt.xxxの呼び出しにしておくことにしました

>>378なるほどたしかにそんな定義でできますね
目から鱗でした

380 :デフォルトの名無しさん:2014/08/24(日) 23:09:56.22 ID:/FddapLM.net
>>371,371
ありがとうありがとう

381 :デフォルトの名無しさん:2014/08/25(月) 13:17:00.42 ID:QP4jkvqW.net
馬鹿には無理

382 :デフォルトの名無しさん:2014/08/26(火) 23:45:43.15 ID:fg6dDNl2.net
俺はevalとかmethod_missingに対する本能的な警戒心を解くことはできなかった。

383 :デフォルトの名無しさん:2014/08/27(水) 00:09:38.37 ID:PsKPXBAp.net
トットリニーップwwwwwwwwwwwwwww トットリニーップwwwwwwwwwwwwwww 
トットリニーップwwwwwwwwwwwwwww トットリニーップwwwwwwwwwwwwwww 
トットリニーップwwwwwwwwwwwwwww トットリニーップwwwwwwwwwwwwwww 
トットリニーップwwwwwwwwwwwwwww トットリニーップwwwwwwwwwwwwwww 
トットリニーップwwwwwwwwwwwwwww トットリニーップwwwwwwwwwwwwwww 
トットリニーップwwwwwwwwwwwwwww トットリニーップwwwwwwwwwwwwwww 
トットリニーップwwwwwwwwwwwwwww トットリニーップwwwwwwwwwwwwwww 
ホーシンツクツクwwwwwwwww ホーシンツクツクwwwwwwwww 
ホーシンツクツクwwwwwwwww ホーシンツクツクwwwwwwwww 
ホーシンツクツクwwwwwwwww ホーシンツクツクwwwwwwwww 
ホーシンツクツクwwwwwwwww ホーシンツクツクwwwwwwwww
ニーィップwwwww ニーィップwwwww ニーィップwwwww ニーィップwwwww 
ニ˝ィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィwwwwwwwwwwwwwwwwwwww

384 :デフォルトの名無しさん:2014/08/28(木) 20:52:39.51 ID:bYpjcPNQ.net
ハッシュ配列で整数値をキーに使っているんですが、これを効率よくできますか?
効率よくする方法があれば知りたいです。

385 :デフォルトの名無しさん:2014/08/28(木) 21:24:30.26 ID:wD312MD5.net
効率って何? それがどうなれば「よくした」ことになるの?
曲がりなりにもプログラマなら言葉は正確に

386 :デフォルトの名無しさん:2014/08/29(金) 00:06:45.17 ID:8OnVWPNr.net
まず、「ハッシュ配列」なんてRubyには無いし

387 :デフォルトの名無しさん:2014/08/29(金) 02:30:57.57 ID:YhQ421pd.net
Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例
http://www.amazon.co.jp/dp/4797380357/

面白そう。
るびきちさんの本は評判良いのが多いし。

388 :デフォルトの名無しさん:2014/08/29(金) 06:26:08.48 ID:4v1OcElJ.net
ム板にいる時点でプログラマ扱いする奴って未だに減らないよな
本職が集まるのはマ板のほうだろ、と
こっちは職業関係なく技術全般

389 :デフォルトの名無しさん:2014/08/29(金) 06:31:20.33 ID:zbAMrUw4.net
>>388
誰も職業プログラマとは言ってないだろう
上流SEだろうが学生だろうが自然科学研究者だろうがそこら辺の事務員だろうが
プログラム書いてる時はプログラマだよ

390 :デフォルトの名無しさん:2014/08/29(金) 06:43:24.73 ID:4v1OcElJ.net
日本人全員ねとうよ

391 :デフォルトの名無しさん:2014/08/29(金) 08:41:28.12 ID:JuyS8Rqx.net
またトットリのニップが暴れてるのかw

392 :デフォルトの名無しさん:2014/08/29(金) 18:00:04.04 ID:y0wlLGq8.net
ニシトットリニップw

393 :デフォルトの名無しさん:2014/09/01(月) 00:22:32.67 ID:peTXbjy9.net
「日本人」なんて括りを使ってる時点で民族主義者だろう

394 :デフォルトの名無しさん:2014/09/01(月) 00:40:05.34 ID:0L11GGiJ.net
Rubyではじめるシステムトレード
http://www.amazon.co.jp/dp/B00K388BNC/
やすっぽい感じの本だが、意外と入門書として良書かなと思った。

395 :デフォルトの名無しさん:2014/09/01(月) 07:53:41.50 ID:zQucGkuf.net
ステマステマステマ〜
ステマをクリると〜
アタマアタマアタマ〜
アタマがクルう〜

396 :デフォルトの名無しさん:2014/09/01(月) 09:41:40.66 ID:8W5kaaXl.net
1.
クラスのメンバ変数の個々のインスタンスに別々のヘルプを出す
機能を付けたいのですが,どの様にすれば良いでしょうか?
というか,Array クラスに個々のインスタンス向けのヘルプを追加出来ますか?
2.
クラスのメンバ関数にもヘルプを出す機能を付けたいのですが,
どの様にすればよいでしょうか?

class A
 attr_accessor :a, :b
 def initialize
  @a = ArrayDerivedClass.new
  @b = ArrayDerivedClass.new

  @a と @b の配列の値の設定
 end

 def func()
  関数についてのヘルプはどの様に設定できるのか...
 end
end

a = A.new
a.a.set_help( "文字列のヘルプ" )
a.b.set_help( "文字列のヘルプ" )
a.func.set_help( "文字列のヘルプ" )
a.a.show_help
a.b.show_help
a.b.show_help

397 :デフォルトの名無しさん:2014/09/01(月) 09:44:27.91 ID:8W5kaaXl.net
最後の行は間違いでした.
a.func.show_help

関数については A のインスタンス毎にヘルプを出す意味は
無いかもしれませんので,クラス共通で良いです.

398 :デフォルトの名無しさん:2014/09/01(月) 11:09:27.77 ID:gUv8HVAQ.net
Rubyにメンバ変数やメンバ関数はありません

これは言葉尻の問題ではなく、基礎的な統合的な学習を行なっていないということを示唆します
つまり、あれこれやるには基礎知識が不足していてまだ早過ぎます

399 :デフォルトの名無しさん:2014/09/01(月) 11:18:30.35 ID:8W5kaaXl.net
すみません.勉強が足りていないのは認めますが,,,
そこをなんとか...

400 :デフォルトの名無しさん:2014/09/01(月) 12:38:51.58 ID:gUv8HVAQ.net
うっせーバカ氏ね

ヘルプが欲しいというのは誰がどういうときにどんなヘルプを欲しいのだろうか
ヘルプが欲しいときときにわざわざスクリプトを書き換えてスクリプト本体を実行するのだろうか
それは一体いつどこに表示されるのだろうか

ああもう面倒くさい、マニュアルと呼ぶ

スクリプト作成中にメソッドのマニュアルが欲しいときにスクリプトの一部を書き換えて実環境で実行して
マニュアルテキストをアプリケーション画面に表示させるなんてことは絶対にない
つまり、マニュアルが知りたいときというのはなにか別途標準入力と標準出力に相当するものがある環境なはずだ
具体的にはirbとか、Ruby実行と全然関係ないWebブラウザとかテキストビューアとか、いっそIDEに相当するものとか
そういう外部環境からマニュアル要求を実行させてそういう外部環境に表示させるのが妥当
たとえばRdoc、たとえばYARD

class C
# すごいメソッド
# @return [String] すごい結果を文字列で返す
def mes
'Yay!'
end
end

401 :デフォルトの名無しさん:2014/09/01(月) 13:07:15.79 ID:MGwyWz7V.net
有難うございます.

説明が足りませんでしたが,
irb にてプログラム作成者のプログラムを利用者に実行してもらい,
利用者がよくわからない作成者のプログラムの内部実装に使われる
各変数の役割りを伝えたいと考えています.

プログラム自身は何をするのかおおよそは分かっていても
他人のプログラムの実装アルゴリズムはよくわからないので,
irb にてプログラムを実行しつつ,プログラムの動作については,
最初に new されて取得した変数について show_help とすれば
そのクラスにてサポートされている関数ならびに動作を示すことができ,

そこで示された各関数についてもそれぞれ show_help とすれば
内部実装のおおよそのアルゴリズムがしめされ,
そこで利用されている変数についても show_help とすれば,
その変数の定義方法と利用方法が示されれば良いと考えています.
そうすれば,irb 上で変数のアクセス方法を理解しながら
irb 上で変数変更等をしつつ内部動作をフォロー出来るのでは無いかと考えています.

RDoc, YARD について調べてみます.

402 :デフォルトの名無しさん:2014/09/01(月) 18:13:38.30 ID:ufbPbDzE.net
>>401
ソース中にドキュメントをきちんと書いていれば、利用者に irb じゃなくて pry を使って貰えば済む

403 :デフォルトの名無しさん:2014/09/01(月) 20:19:30.95 ID:y5nx9Flo.net
>>401のお手盛りのなんだかを使わされる人たちがしんそこ可哀想でならない
そんな人間が存在しないことを願いたい

404 :デフォルトの名無しさん:2014/09/01(月) 23:41:01.86 ID:FYOTBzBE.net
>>403
pry というのがあるのですか〜。
インスタンスごとにヘルプを付ける機能もあるのでしょうか。
詳しく調べてみます。もちろん
自分で自己流のものを作るより皆に認められている
方法を使うほうが良いと思ってます。

>>403
それは認めます。w

メタオブジェクトプログラミングで
クラスのインスタンス毎やメンバ関数(C++用語ですが)に自己説明型の
なんらかのヘルプ機能を付けることぐらい朝飯前なのかと思ってましたが、
その前にそんなものが必要でないということですね。お騒がせしました。

405 :デフォルトの名無しさん:2014/09/02(火) 03:11:26.77 ID:77EG12Xs.net
>自己説明型の
違う

あなたにはプログラミング一般およびRuby固有の知識も理解も全く欠けていることがよくわかった
あなたのやることは全て間違っている
何もやるな

406 :デフォルトの名無しさん:2014/09/02(火) 06:19:05.88 ID:tKEpbnMp.net
いやじゃあ Ruby でも docstring したいんじゃああ
ということなんだろうなきっと

407 :デフォルトの名無しさん:2014/09/02(火) 09:42:48.05 ID:d4GudW4x.net
メンバ変数はないとか怒ってるバカがいてワロタ
プログラマってほんと嫌な人種だな

408 :デフォルトの名無しさん:2014/09/02(火) 12:50:14.57 ID:9bYbyMSc.net
>>401
インテリセンスはどうでしょうか?
関数、変数のコメントなどを使われている個所でマウスポインタを持っていくだけで
表示します。
構文上の誤りは、その場で下線が付きます。
呼び出し先、呼び出し元を一覧できます。

409 :デフォルトの名無しさん:2014/09/02(火) 12:55:28.14 ID:9bYbyMSc.net
Rubyには必要ないので、C++でやってはどうでしょうか。
どのようなものでもC++には必要とする人が居ます。

410 :デフォルトの名無しさん:2014/09/03(水) 00:00:03.11 ID:UsrF22+E.net
「gem」 はどうやってgemパッケージを管理しているのかわかりません
rbenvでrubyバージョンを管理しているのですが、gem installや gem listコマンドはその環境ごとにしっかりgemを管理してくれています
gemコマンドとは独立のはずのrbenvでのrubyバージョン渡り歩きに、「gem」はどうして対応できているのでしょうか

411 :デフォルトの名無しさん:2014/09/03(水) 03:09:55.11 ID:vIx21Y4j.net
>>410
~/.rbenv以下のディレクトリ構成を見ると分かるがそれぞれの環境ごとにディレクトリが分かれていてその中にgemが導入されていたはず。

412 :デフォルトの名無しさん:2014/09/03(水) 12:46:07.97 ID:UsrF22+E.net
>>411
rbenvが勝手に作ったディレクトリの場所を「gem」がどうやって知っているのかがわからないのです・・・

413 :デフォルトの名無しさん:2014/09/03(水) 13:37:07.00 ID:HoPhs46K.net
>>412
あなたがgemを起動している時に使っているgemはrbenvによって生成されたgemコマンドへのラッパです。
ラッパによって各.rbenv/versions/[VERSION]/bin/gem が呼び出され、呼び出されたgemは各versionのroot以下の事しか把握していません。

414 :デフォルトの名無しさん:2014/09/03(水) 13:50:23.85 ID:vIx21Y4j.net
>>412
~/.rbenv/shimsのなかのファイル(ruby,gem,etc...)を見るとスクリプトになっており、PATHの先頭付近に追加されてるのでここから呼ばれる。
(which gem)
ざっと目を通した感じだと、カレントディレクトリに.rbenv-versionまたは.ruby-versionがあればそこから、なければ~/.rbenv/versionの値が参照され、それをもとにどのディレクトリから呼び出すかを決める。
つまり、環境ごとに呼び出されるgem本体が違う。

415 :デフォルトの名無しさん:2014/09/03(水) 15:54:57.09 ID:UsrF22+E.net
>>413,413
gemコマンドをあラップしていたのですね。理解しました
ありがとうございます

416 :デフォルトの名無しさん:2014/09/04(木) 15:57:10.66 ID:OIDeHqM9.net
Ruby(Watir)でieの通知バーを制御する方法はありませんか?

417 :デフォルトの名無しさん:2014/09/07(日) 05:52:26.74 ID:dbFvupeQ.net
rubyのunitテストって、一番のお薦めのソフトって何ですか?
javaではjunitとjmockit使ってました。

418 :デフォルトの名無しさん:2014/09/07(日) 07:49:20.91 ID:KNwhARCn.net
rails標準のかrspec

419 :デフォルトの名無しさん:2014/09/07(日) 12:42:48.08 ID:82AeVD3A.net
>>417
標準でついてくるminitest
使い方は、Junitそのまま。

420 :デフォルトの名無しさん:2014/09/09(火) 11:23:12.23 ID:5uq9Q4bu.net
>>407
C++にインスタンス変数がないのと同様、Rubyにはメンバ変数はない
メンバ変数はC++の専門用語およびC++に根付いた特殊な概念であって、オブジェクト指向固有の呼び名ではない

特定のオブジェクト指向言語の方言をオブジェクト指向全般で通用するものだと勘違いする現象は時々みられるが、
学習上も定義上も傍から見てても恥ずかしく意味がないので、気をつけるといい

稀に「その言語の用語」で説明しないサイトや書籍が現れるが、所詮その程度で害悪しか撒かないのでとっとと燃やしてしまえ

421 :デフォルトの名無しさん:2014/09/09(火) 12:34:04.23 ID:xwHNZTBE.net
インスタンス変数とクラス変数
まとめて呼ぶときに、メンバ変数って呼ばれても特に変な感じはしないけどな。
単純にメンバというと、メソッドも含まれるわけで。

422 :デフォルトの名無しさん:2014/09/09(火) 21:54:00.76 ID:QKhHrQUh.net
php -r "$a=1; echo $a;"
phpみたいにrubyでコマンドラインからコードを引数で渡して実行する方法を教えてください

423 :デフォルトの名無しさん:2014/09/09(火) 22:25:23.49 ID:jlMM873/.net
>>422
-e

424 :デフォルトの名無しさん:2014/09/09(火) 22:36:29.41 ID:dRW5L+4V.net
>>423
ありがとうございます。

425 :デフォルトの名無しさん:2014/09/10(水) 00:04:50.55 ID:ysKE+Qj1.net
WindowsのRuby Installerで最新版Rubyインストールして、それはうまくいった
んだけど、gem install nokogiriとやるとエラーになってうまくいかないのはなぜ?
フェッチは100%まで行くけど、undefined method `[]‘ for nil:NilClassみたいな
エラーがでて止まっちゃう。
もうイライラしまくりんぐ。

426 :デフォルトの名無しさん:2014/09/10(水) 00:51:41.65 ID:3fyaXQX9.net
>>425
v8かnods.jsが必要とか?

427 :デフォルトの名無しさん:2014/09/10(水) 01:52:04.32 ID:pTBoSvxK.net
Windowsを諦める。

428 :デフォルトの名無しさん:2014/09/10(水) 01:57:57.88 ID:U67N92ow.net
だが待って欲しい。Macでもnokogirinのインストールは鬼門だ。

429 :デフォルトの名無しさん:2014/09/10(水) 02:17:43.27 ID:Kk1nHIci.net
>>425
devkit入ってる?

430 :デフォルトの名無しさん:2014/09/10(水) 08:59:47.29 ID:av5QsdtA.net
だが待って欲しい。そもそもrubyのインストールは鬼門だ。

431 :デフォルトの名無しさん:2014/09/10(水) 09:44:20.33 ID:hXO3q56q.net
choco はどうなんだろう
windows でもコマンドライン数行でインスコ説明完了な時代になってるんだろうか

432 :デフォルトの名無しさん:2014/09/10(水) 09:52:33.54 ID:4LqmTc+v.net
なぜお金を払ってまでwindowsなどという苦行を続けるのか

433 :デフォルトの名無しさん:2014/09/10(水) 17:04:55.22 ID:EEeqkt2a.net
サイトつくったとこないけどなんとなくraisについての本読んでいます
ルーティング、もろもろの再利用、アクティブレコードあたりは便利だと思ったのですが、
特にビューヘルパーとかhtmlを別の名前にしましたみたいなものが多くありません?それメソッド使わずに普通に書いたほうがみやすいしわかりやすいのではというものが多いと思いました.経験者からするとどうなのでしょうか

434 :デフォルトの名無しさん:2014/09/10(水) 17:06:51.83 ID:/KH51cxp.net
そうだよ

435 :デフォルトの名無しさん:2014/09/10(水) 20:33:38.43 ID:lzotv2Nx.net
そんな回りくどく書くより俺が直接書いたほうが早いし速いしわかりやすい
いやもうまったくその通り
そんな回りくどく書くより俺が直接書いたほうが(俺にとって)早いし(俺にとって)速いし(俺にとって)わかりやすい
いやもうまったくその通り

436 :デフォルトの名無しさん:2014/09/10(水) 21:29:35.68 ID:MIzNsnl2.net
>>433
Railsに関する質問や相談なら
WebProg板に専用スレがあるから、
そちらへ逝きなされ

437 :デフォルトの名無しさん:2014/09/10(水) 21:34:17.56 ID:x7jt4/gl.net
>>433
単純なTagHelperについてはそのとおりかもしれない
しかしFormBuilderは他にも色々やってくれる(nameやvalueを適切に入れてくれる)ので
生のHTMLを書くよりは書きやすいと思う

438 :デフォルトの名無しさん:2014/09/11(木) 00:19:27.00 ID:lctgDj8v.net
最近gemって一発インストールできない不完全なの増えたよな
こういうのって地味に大事というか、初心者離れを加速させちゃうんじゃないかと
いう気がする。
メンテする奴もやる気がなくなってきている、コミュニティとして煮詰まってきちゃったんだと思うけど。

もっとしっかりやれ。まあ俺は何もしないけど。

439 :デフォルトの名無しさん:2014/09/11(木) 00:46:47.82 ID:SzkLW3l3.net
返信どもです

440 :デフォルトの名無しさん:2014/09/11(木) 07:26:43.55 ID:IFETaxJc.net
>>438
たとえば?

441 :デフォルトの名無しさん:2014/09/11(木) 09:13:29.79 ID:1Qd2Os77.net
こういう口だけ偉そうに出して「俺は何もしない」とドヤ顔するクズが一番いらねえな

442 :デフォルトの名無しさん:2014/09/11(木) 10:16:40.23 ID:qpyAR3PI.net
>>438=>>441

443 :デフォルトの名無しさん:2014/09/11(木) 14:52:29.61 ID:xQfGfu/o.net
Rubyコミュニティはドヤ顔するクズが多すぎるよな。
はやくPythonやJavaScript系に乗り換えた方がいい。

444 :デフォルトの名無しさん:2014/09/11(木) 15:05:01.07 ID:1Qd2Os77.net
Python側も「日本製のプログラム言語がいけすかねえ」なんて理由でやってくる連中はお断りだろ
ドヤ顔するクズと同じぐらい有害

445 :デフォルトの名無しさん:2014/09/11(木) 19:50:23.40 ID:WdQgW6yP.net
>>443
>はやくPythonやJavaScript系に乗り換えた方がいい。

ついつい本音が出てしまったねw

アンチが乱入して暴れるのはRuby関連スレの恒例だな
まあ、それだけ他のスクリプト言語プログラマからすれば、
Ruby が気になって気になって夜も眠れないんだろうなぁ(棒

446 :デフォルトの名無しさん:2014/09/11(木) 22:42:45.70 ID:/K7dGRs5.net
Node.jsなんて、既にオワコン期に入ってるじゃん。
Rubyもだけど。

447 :デフォルトの名無しさん:2014/09/12(金) 00:34:42.81 ID:OuSEN9ev.net
もうみんな疲れちゃったのかな

448 :デフォルトの名無しさん:2014/09/12(金) 00:40:48.66 ID:/jOX3V4W.net
railsで大きく知名度を上げたんで、ruby2になったここで、言語やライブラリに時間をかけるのではなくて、rubyのキラーアプリを一つ出すといいんじゃないですかね
ruby2の言語仕様や改良はひとまず休憩して、周辺のgemをよりモダンにしたりhtml guiを洗練させたりとか、dbつけてruby platformと密着にさせるとか

449 :デフォルトの名無しさん:2014/09/12(金) 08:19:58.62 ID:vSDiSYyP.net
node.jsはみんな秋田漢字だ

450 :デフォルトの名無しさん:2014/09/12(金) 09:11:38.07 ID:XdsfP9FI.net
確たる根拠もないのにあれはオワコンこれはオワコンって書き散らすレスは無視で

451 :デフォルトの名無しさん:2014/09/12(金) 11:07:14.97 ID:RiRNscWF.net
Ruby やrails やってる人はみんなそれなりに疲れる。

マジで。 心折れそうな時とかあるし。 頑張ってるけど。

452 :デフォルトの名無しさん:2014/09/12(金) 11:08:21.68 ID:RiRNscWF.net
> Ruby やrails やってる人はみんなそれなりに疲れる

すまん、誤字

Ruby やrails やってる人はみんなそれなりに疲れてる。

453 :デフォルトの名無しさん:2014/09/12(金) 12:06:47.25 ID:97za8FFX.net
rubyで何か勉強になるもの作りたいんだけどいい題材ない?

454 :デフォルトの名無しさん:2014/09/12(金) 18:00:08.39 ID:ZWZJ98Tr.net
http://judge.u-aizu.ac.jp/onlinejudge/

455 :デフォルトの名無しさん:2014/09/12(金) 18:00:33.59 ID:ZWZJ98Tr.net
http://tenka1-2014-final-open.contest.atcoder.jp/

456 :デフォルトの名無しさん:2014/09/13(土) 11:44:06.43 ID:Xnt2R8P3.net
イテレータ内で、レシーバに要素を追加(や削除など変更)した場合の動作って決まってるんでしょうか?

下記のように要素追加した場合は、途中で追加した要素まで含めてイテレートしてくれました
a=[1,2,3,4]
c=0
a.each{|i|
print i
a<<i if(c+=1)%2==0
}

1234244

457 :デフォルトの名無しさん:2014/09/13(土) 11:50:18.03 ID:EgQD9V/2.net
それでいいよ

458 :デフォルトの名無しさん:2014/09/13(土) 12:37:57.18 ID:O7s7l3Vq.net
エロサイトスクレイピングしろ

459 :デフォルトの名無しさん:2014/09/13(土) 23:31:21.22 ID:NaPTFTNe.net
>>453
自分から作りたいものがなんもないのならRubyのことは忘れて街に出よう3連休だ
「銃を手に入れたんだけどなんでもいいので撃ってみたいですどうすればいいですか」的な目的見失った感じのは勘弁

460 :デフォルトの名無しさん:2014/09/14(日) 03:17:49.08 ID:HYioYToX.net
>>459
作りたいものだの目標だの言う人間が多すぎると思うんだけど。
プログラミング言語に興味をもって何か勉強してみたいと思ったからとりあえず色々と取り組んでみて、その中でやりたいことを見つける方針じゃだめなの?

461 :デフォルトの名無しさん:2014/09/14(日) 04:12:36.10 ID:LAThkisw.net
作りたいものが目的じゃなくて
プログラミング自体が目的なら
それでいいんじゃない?

獣の喩えは適切じゃないね

462 :デフォルトの名無しさん:2014/09/14(日) 06:05:30.20 ID:VdLJmbOR.net
獣の喩えってなに?

463 :デフォルトの名無しさん:2014/09/14(日) 08:28:07.47 ID:VxA609sk.net
作りたいものが目的でやれるのなんてWebくらいだね
他のは手段を目的に出来ない限りとてもじゃないけど労力に見合わない

464 :デフォルトの名無しさん:2014/09/14(日) 08:37:41.07 ID:3TnczO87.net
何作ればいいかわかんねという人のために課題をいくつかでっちあげてみた
ほぼ易しいものから難しいもの順

* 摂氏と華氏の相互変換
* 指定したディレクトリの中にあるファイル名を列挙
* 日米英仏独の現在時刻を表示
* FLAC を MP3 に変換(もちろん flac や lame など使用可)
* iTunes のストアで売れてるらしいアプリのタイトルを列挙
https://itunes.apple.com/jp/rss/topgrossingapplications/limit=10/xml
* 画像ファイル(JPEG/GIF/PNG のいずれか)の本当の拡張子を判別
* おかいものリスト(追加、編集、削除、個別表示、一覧表示、ソート等)
* エロサイトスクレイピング

465 :デフォルトの名無しさん:2014/09/14(日) 09:22:02.58 ID:PAZT5dFk.net
1)縦横のそれぞれの列に1〜6の数字が1つずつ入ります(ここは数独と同じ)
2)マス目にあらかじめ入っている(数字)は太線で囲まれたブロックに入る数字の合計を表しています
3)太線で囲まれたブロックの中には同じ数字が入ることもあります

┏━━┳━━┳━━┳━━┯━━┳━━┓
┃(3) ┃(4) ┃(13)┃(5) │  ┃(8) ┃
┠──┣━━┫──┣━━┳━━┫──┨
┃  ┃(7) ┃  ┃(1) ┃(7) ┃  ┃
┣━━┫──┃──┣━━┫──┣━━┫
┃(11)┃  ┃  ┃(7) ┃  ┃(6) ┃
┠──┣━━┻━━┫──┣━━┻━━┫
┃  ┃(6) │  ┃  ┃(6) │  ┃
┣━━┻━━┳━━┻━━╋━━┳━━┫
┃(9) │  ┃(6) │  ┃(4) ┃(3) ┃
┣━━┳━━┻━━┳━━┻━━┫──┨
┃(4) ┃(5) │  ┃(11)│  ┃  ┃
┗━━┻━━┷━━┻━━┷━━┻━━┛

これを解くプログラムを ruby でおながいします
(たぶんずれるので等幅フォントのエディタにコピペで見てください)

466 :デフォルトの名無しさん:2014/09/14(日) 10:00:09.59 ID:HYioYToX.net
>>464
エロサイトスクレイピングをしれっと入れるなよ!

467 :デフォルトの名無しさん:2014/09/14(日) 11:50:34.01 ID:KPgHSz1I.net
初心者の気持ちを忘れてしまったオッサンのオナニーにつきあう必要はないよ
外から渡された目的のよくわからない『課題』をやることほど、摩耗してしまうものはない
本当に興味を持てる回数は最初の1回程度なんだから、そんなものに使い潰してしまうのは大損だ

やりたいものだけやりなさい
やりたいものがないなら一旦離れなさい
パソコンを使っていれば、プログラミングできそうな機会というのは必ずやってきます

468 :デフォルトの名無しさん:2014/09/14(日) 11:56:11.45 ID:E5aokUpH.net
コンサルの勉強して問題発見手法を身に着ければいいよ。

469 :デフォルトの名無しさん:2014/09/14(日) 14:27:29.68 ID:eKNmfx5B.net
自分がPCでやることを補助する何かを作ると
自分で使うことになって改造とかもやる気が出ると思う
たとえばプログラミングするエディタを拡張する何かを作ろうとしてみたり
ネットサーフィンに便利な自分用サイトを作ってみたり
エロサイトスクレイピングしてみたり

パズルを解くようにプログラミングするお題が欲しいだけなら会津オンラインジャッジだな

(rubyじゃないけどダウンロード補助ツールを数年前に自分で書いて今も使ってるわ)Oo。.(´-`

470 :デフォルトの名無しさん:2014/09/14(日) 15:53:16.12 ID:HYioYToX.net
>>469
たとえばエディタの拡張機能を作りたいと思っても、どこから始めていいかわからない場合はどうすればいいかな?
とりあえず調べるなどして他を参考にしつつって感じでいいのかな?
一応文法とかは大丈夫だと思うんだけど。。

471 :デフォルトの名無しさん:2014/09/14(日) 16:12:54.97 ID:VxA609sk.net
>>470
そりゃ他の人のを真似するんだよ
でもそういう特定のアプリに強く依存したものはバッドノウハウが身に付くだけだから初心者の勉強には相応しくない

472 :デフォルトの名無しさん:2014/09/14(日) 16:16:57.97 ID:DRyo//L5.net
https://www.youtube.com/watch?v=-Lfwp2B04GU

473 :デフォルトの名無しさん:2014/09/14(日) 16:21:10.62 ID:eKNmfx5B.net
ごめん、例えばといいつつエディタはあんまりいい例じゃなかったかもしれんわ
エディタの拡張方法を調べる必要があるしRubyが入り込む余地が少ないかも

具体的な例としては、ソースを解析する何かを作るとして、
(まずRuby関係ないところなのでめんどいが)
大抵のエディタは拡張機能で外部プログラムを呼べるようになってるから
そこからRubyに標準入力に編集中の内容を渡すようにする

それができたら初めてRubyで変数抽出とかコールツリー作るとかやりたいことをやる
解析までしなくても、全行をuniq.sortして出力するスクリプトとか作っておくとたまに使ってるわ
アウトプットは標準出力をエディタに表示するくらいしかないかも

474 :デフォルトの名無しさん:2014/09/14(日) 18:57:34.47 ID:VLz5e6gt.net
>>456
遅レスになるけど、
「イテレータで列挙している間にイテレータを破壊的に操作した時の振る舞い」
の仕様は定義されておらず、動作は不定になる
これは Ruby 固有の仕様ではなく、たとえば Java のイテレータも同じ
Ruby の場合は、イテレータで定義されている each メソッドの実装によって、
破壊的操作(たとえば要素の追加や削除)を含めて列挙したり列挙しなかったりする

だから列挙中での破壊的操作はコードの可読性を大きく損ねるから、避けるべき

475 :デフォルトの名無しさん:2014/09/14(日) 21:25:52.32 ID:HYioYToX.net
>>471
>>473
なるほど…言語による向き/不向きの問題でもあるのかな。

自分でやってみたいと考えたのはTwitter関係だとかgmailをいじるだとか、そこらへんだけどこっちもやはり初心者には厳しいか。

476 :デフォルトの名無しさん:2014/09/14(日) 21:36:25.69 ID:lfdT4fPA.net
rubyは慣れれば破壊的メソッドや副作用を使わなくなり関数言語的になっていく。
個人的にはイテレーション中はfreezeする仕様でも良かったと思う。

477 :デフォルトの名無しさん:2014/09/14(日) 21:38:11.09 ID:VxA609sk.net
Rubyはクラスが基本的にミュータブル前提だから関数型には向いてない

478 :デフォルトの名無しさん:2014/09/15(月) 23:43:37.52 ID:qXx696JR.net
rubyと正規表現に関する質問です

p array = "1日2時間3分4秒".split(/(\d+?[日|時間|分|秒])/)
を行うと、
["", "1日", "", "2時", "間", "3分", "", "4秒"]
になり、1.""が作られてしまう、2.「時間」が分解されてしまうため悩んでいます

["1日", "2時間", "3分", "4秒"]
とするにはどう修正すればよいでしょうか?

おねがいします

479 :デフォルトの名無しさん:2014/09/16(火) 00:09:09.95 ID:rwPnUpsn.net
>>478
[日|時間|分|秒]は、日時間分秒|のどれかの文字ってことでしょ。グルーピングは丸括弧で。
ただし、splitはそれも結果に入ってくるんだっけ。数値以外の繰り返しじゃダメなの。

480 :デフォルトの名無しさん:2014/09/16(火) 00:20:02.61 ID:+Ut5bl5+.net
>>478
$ irb
irb(main):001:0> "1日2時間3分4秒" =~ /(&yen;d+)日(&yen;d+)時間(&yen;d+)分(&yen;d+)秒/
=> 0
irb(main):002:0> [$1 + '日', $2 + '時間', $3 + '分', $4 + '秒']
=> ["1日", "2時間", "3分", "4秒"]
irb(main):003:0>

481 :デフォルトの名無しさん:2014/09/16(火) 01:16:09.80 ID:ZVUC/mC5.net
>>478です
>>479,479さん、教えていただきありがとうございました

splitは決められた記号とかでStringを分割するためのメソッドですよね
こういうのはそのまま正規表現で書かなきゃいけないのに、splitが万能な思い込みがあって勘違いをしてました

アドバイスやGoogle先生を参考に書きなおして、なんとか上手く行きました

> p "1日2時間3分4秒".scan(/((\d+?)(日|時間|分|秒))/).map { |s| s[0] }
["1日", "2時間", "3分", "4秒"]

教えて下さりありがとうございました

482 :デフォルトの名無しさん:2014/09/16(火) 01:44:31.07 ID:h14rBBnh.net
>>480
OK林檎厨は氏ね
\と&yen;の区別のつかないお可哀想な林檎厨は氏ね

端末が悪いんだけどさ

483 :デフォルトの名無しさん:2014/09/16(火) 12:28:01.31 ID:hd4XZYur.net
変数名を変数を使って定義することはできませんか?

foo = "bar"
foo = "hoge"

のようにするとfooにbarが代入された後それをhogeで上書きすることになりますが、fooにbarを代入した後fooの中身のbarをhogeの変数名にして、
bar = "hoge"
という変数が作りたいです。

484 :デフォルトの名無しさん:2014/09/16(火) 12:35:51.91 ID:4hbcghNr.net
>>478
p array1 = "1日2時間3分4秒".split(/(?=\d+(?:日|時間|分|秒))/) #数字+単位の直前で分割
p array2 = "1日2時間3分4秒".split(/(?<=日|時間|分|秒)/) #単位の直後で分割
p array3 = "1日2時間3分4秒".scan(/\d+(?:日|時間|分|秒)/) #数字+単位を抽出

#「正規表現リテラル =~ 文字列」の場合だけ作動する名前つきグルーピングをローカル変数に設定する微妙な機能
/(?<day>\d+日)(?<hour>\d+時間)(?<min>\d+分)(?<sec>\d+秒)/ =~ "1日2時間3分4秒"
p [day,hour,min,sec]
p last_match

485 :デフォルトの名無しさん:2014/09/16(火) 12:42:50.87 ID:4hbcghNr.net
>>477
向くも向かないも
関数型っぽい書き方をするってだけの話なんで
簡潔に記述できるのならそれでいいじゃない

本物の関数型と違って
Cのメソッドだけですむなら速くなったり
余計にオブジェクト生成したりして逆に遅くなったりするかもしれないけど

486 :デフォルトの名無しさん:2014/09/16(火) 21:54:00.55 ID:rOfVI/V/.net
↓のYAMLファイルを
---
[d1, d2]
---
- x1
- x2
...
names : [test, test2]
emails: {main: test@test.com, sub: test2@test.com}
↓のスクリプトでパース使用としたところ
require 'yaml'
File.open('sample.yml') do |io|
YAML.load_documents(io) do |d|
p d
end
end

↓のエラーが出ました。
/Users/bacchi/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych.rb:373:in `parse': (<unknown>): did not find expected <document start> at line 1 column 1 (Psych::SyntaxError)
from /Users/bacchi/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych.rb:373:in `parse_stream'
from /Users/bacchi/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych.rb:456:in `load_stream'
from /Users/bacchi/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/psych/deprecated.rb:29:in `load_documents'
from parse.rb:4:in `block in <main>'
from parse.rb:3:in `open'
from parse.rb:3:in `<main>'
「...」をコメントアウトしたところ、きちんとパースできたのですがなぜ、「...」が入るとエラーが発生するか全くわかりません。
どなたかご存知の方がいらっしゃればぜひ教えていただきたく。。
環境ですが、OSはOS X 10.9、rubyのバージョンは2.1.2p95です。
よろしくお願いします。

487 :デフォルトの名無しさん:2014/09/16(火) 22:32:15.86 ID:UfZMMld+.net
... のあとに --- がないから驚かれてるんじゃない?

488 :デフォルトの名無しさん:2014/09/16(火) 22:40:56.77 ID:0yIjZIb5.net
>>485
>>476は副作用を使わないのが関数型だと言っているから>>477の突っ込みは妥当
コレクション操作にラムダ使って宣言的に書いたりするのは
今時の言語ではRubyに限らず全く珍しくないし

489 :デフォルトの名無しさん:2014/09/16(火) 22:55:01.92 ID:qqfxAbb8.net
>>486
...以降は無視される と思ってるのかもしれんがたぶん違う
あくまで1ドキュメント読み込むYAML.loadの場合はドキュメントの終了までしか読み込まないから無視されてるように見えるだけ

load_streamはストリーム全体(複数ドキュメント)を読み込む
...はそのドキュメントが終了したことを示す記号
なので直後にはドキュメント開始の記述がないとパースエラーになる
ドキュメントの開始は(%YAMLとかのディレクティブの後に)---で、その間に許されてる記述は空行か...だけっぽいね

490 :デフォルトの名無しさん:2014/09/16(火) 23:08:20.53 ID:+Ut5bl5+.net
>>488
>>>477の突っ込みは妥当

もしも「Lisp は(関数型言語ではなく)手続き型言語である」という
仮説が正しければ、妥当だね

実際、世の中には「純粋関数型言語にあらずんば関数型言語にあらず」という、
いわゆる「ハスケラ」という人達がいて、彼らはそう主張している
おそらく >>477>>488 はハスケラ症の患者さんなんだと思われる

  >367 名前: デフォルトの名無しさん Mail: sage 投稿日: 2011/10/26(水) 12:25:43.06
  >>>366
  >それはハスケラ特有の症例で、心の病の一つ
  >
  >ハスケルという言語を使っていると、世の中のあらゆる事柄すべてが
  >ハスケルを中心に廻っているように見えるらしい
  >従って、あらゆる関数型言語は静的実行かつ静的型付けでなければならないし、
  >遅延評価が常識であり、一切の副作用は認めようとしない
  >
  >ハスケラにとって関数型言語とはハスケルのことであり、
  >その窓から見える世界が彼らのすべて

あとツッコミを入れると、
> コレクション操作にラムダ使って宣言的に書いたりするのは
> 今時の言語ではRubyに限らず全く珍しくないし

一般にRuby コミュニティで「ラムダ」とは、組み込み関数の Kernel#lambda { .... }、いわゆる関数オブジェクトを指す
そしてコレクション操作だと「ブロックを使って宣言的に書く」というふうに表現する
ブロックはラムダ式の構文糖という些細な工夫でしかないけれど、
ブロックがあるおかげで関数型プログラミングのコードを(ブロック構文が無い言語と比較すると)簡潔に書ける
         (逆にブロックを使わず明示的にラムダ lambda { ... } が必要になるケースはほとんどない)
これもまた、Ruby が(他のスクリプト言語と比較して)関数型プログラミングに適しているという理由の一つになる

491 :デフォルトの名無しさん:2014/09/16(火) 23:52:05.60 ID:rOfVI/V/.net
>>487
... の後に --- を入れたところ、エラーは発生しませんでした!

>>489
YAMLファイルを下記のようにして、スクリプトをYAML.load_fileで処理を行ったところ
... の部分まで評価されました!
- d1
- d2
- d3
...
- d4

お二人共ありがとうございました!
すごく勉強になりました!

492 :デフォルトの名無しさん:2014/09/17(水) 02:00:04.30 ID:B5vXdL5P.net
>>483
またお前か。Hash を使えば?
foo = Hash.new
foo["bar"] = "hoge"
または、foo = {"bar" => "hoge"}

barがSymbol なら、foo = {bar: "hoge"}
bar = :hoge

Symbolとは、識別子に使うラベルをオブジェクトにしたもの

493 :デフォルトの名無しさん:2014/09/17(水) 03:43:25.15 ID:OF7t35vf.net
。oO(barを作った後どうやって使うんだろう)

494 :デフォルトの名無しさん:2014/09/17(水) 17:15:09.22 ID:or6PO8CM.net
中国製pcにマルウェア、米国レノボ使用禁止なお日本では販売
http://awabi.2ch.net/test/read.cgi/news4plusd/1410895382/

495 :デフォルトの名無しさん:2014/09/18(木) 00:44:22.54 ID:mtGMypIE.net
>>478です
>>484
> p array3 = "1日2時間3分4秒".scan(/\d+(?:日|時間|分|秒)/) #数字+単位を抽出
求めていたのはまさにこれです!
ありがとうございます!

「?:」の書き方はググってもなかなか理解できませんでしたが、すごく強力ですね
他の書き方も含め、たいへん勉強になりました
アドバイスしていただきありがとうございました

496 :デフォルトの名無しさん:2014/09/18(木) 21:27:04.44 ID:im6XLLWp.net
>>492
>> またお前か。
?多分違う人だと思います。

それはさておき、回答有難うございます。
ハッシュでやってみます。

497 :デフォルトの名無しさん:2014/09/19(金) 01:35:30.84 ID:Y6OdBODf.net
え? >>941でいいの?
いったい何がやりたかったのか...?

498 :デフォルトの名無しさん:2014/09/19(金) 02:31:51.15 ID:HyAusHv8.net
結局大規模はJava一択という結論か

499 :デフォルトの名無しさん:2014/09/19(金) 09:11:37.59 ID:/ZlJUhOE.net
(a+b)*(c+d)-e
逆ポーランド記法に変換したい

500 :デフォルトの名無しさん:2014/09/19(金) 09:19:12.31 ID:OJCIiOtw.net
a b + c d + * e -

501 :デフォルトの名無しさん:2014/09/19(金) 10:50:32.58 ID:SNqHawTK.net
>>497
ヒント:自演

502 :デフォルトの名無しさん:2014/09/19(金) 12:22:00.17 ID:IEBJm2pX.net
じぶんも初心者だけど、
>Symbolとは、識別子に使うラベルをオブジェクトにしたもの
の説明は、合っているのか?

503 :デフォルトの名無しさん:2014/09/19(金) 12:32:39.90 ID:9nFtEcDJ.net
foo[:bar] = "hoge"
foo = {:bar => "hoge"}
でハマる

504 :デフォルトの名無しさん:2014/09/19(金) 20:32:12.22 ID:PiEEbsAh.net
>>499
本格的にやるならRacc使うのがいいかも

505 :デフォルトの名無しさん:2014/09/19(金) 23:55:28.02 ID:T5wmPk5I.net
>>499
http://ideone.com/CWP5Vg

506 :デフォルトの名無しさん:2014/09/20(土) 08:01:45.32 ID:2AptYtlc.net
>>505
ありがとうございます!

507 :デフォルトの名無しさん:2014/09/20(土) 08:12:13.25 ID:QLH+ZR2V.net
逆ポーランド記法って

5+4-3 この式なら
543-+ なのか。
54+3- ずっとこうだと思ってた・・・///

508 :デフォルトの名無しさん:2014/09/20(土) 08:44:51.69 ID:p579UTgt.net
54+3-
が正しい

509 :デフォルトの名無しさん:2014/09/20(土) 09:39:56.12 ID:+CrzR0fG.net
ほんとだ
ちゃんと優先度つけたうえで直してみた
http://ideone.com/u8Ebfn

510 :デフォルトの名無しさん:2014/09/20(土) 10:37:56.97 ID:F4RvXBbT.net
他の言語ではいろんな箇所で使用する文字列の場合に

String FOO = "foo";

のように定数を作ってまとめておく、とかやってたんですが、Ruby の場合は Symbol 使ってればいちいち定数を定義したりはしない、という認識で合ってますか?
それとも

FOO = :foo

みたいな感じで Symbol も複数箇所で使うなら定数化しておいたほうが良かったりしますか?

511 :デフォルトの名無しさん:2014/09/20(土) 10:52:54.90 ID:+CrzR0fG.net
入出力用の文字列だったら定数で定義しておいたほうがいい
他言語でも定義しておく理由って変更があったとき修正箇所を少なくするためでしょ

シンボルはC言語のenumや#defineで作ったラベル名みたいな役割
その場合はその値に意味はないので定義しておく必要はない

と思ってるけどどうなんでしょ

512 :デフォルトの名無しさん:2014/09/20(土) 11:08:48.42 ID:yzKVnral.net
同じ symbol を複数個所で定義しているとき
値が同じことは保証されてる?

513 :デフォルトの名無しさん:2014/09/20(土) 11:15:01.34 ID:w39e/cxT.net
>>512
されてる

514 :デフォルトの名無しさん:2014/09/20(土) 11:19:07.92 ID:Fiyj9EA+.net
なんでこれ毎回言わなければならないんだろうとちょっと思う
参考書や解説で言わないんだろうか
そんな参考書や解説サイトは捨ててしまえ窓開けてポイだ

>>510
Rubyは基本すべてオブジェクトであり、内部的オブジェクト置き場に厳然として「置か」れていて「動か」ない
で、すべての変数はオブジェクトにぺたんと貼られたただのラベルだ
もし「変数は箱のようなもので…」とか言ってるRubyの解説があったらいますぐ燃やせ
で、オブジェクト自体は移動されず、変数名変更は単にラベルの追加なので、
var1 = "foo"
CONST = var1
とやっても文字列オブジェクトが2つになったりはしない。"var"という固定のオブジェクトにラベルが2枚貼られるだけ
irb> var1 = "foo"
irb> p var1.object_id
-596605568
irb> CONST = var1
irb> p CONST.object_id
-596605568 # 一緒
irb> p CONST
"foo"
つまり、いちどどっかでオブジェクトを作った場合、それに参照可能なスコープの変数がついている限り、
それをどこから呼んでも消えたりはしない
つまり、スコープに気をつけている限り、定数で「固定化」させておく必要がない
じゃあなんで定数があるのかというとクラス内外からCLASS::CONSTのように大文字で呼べるとカッコイイからだ!(わりとマジ)

シンボルはちょっと特殊で、呼び名とオブジェクトIDがひとまとめになってる
ハッシュ入り配列とか、同じ見かけでオブジェクトIDの違う文字列を何百個も生成するのは無駄っぽい気がして蕁麻疹が出るような人が使う

[{"title" => "BOOK1", "price" => 1200}, {"title" => "BOOK2", "price" => 800}, ...]
だと "title" という文字列オブジェクトが配列要素の数だけ生成されてしまうので
[{:title => "BOOK1", :price => 1200}, {:title => "BOOK2", :price => 800}, ...]
とキーをシンボルにすると「タイトル」に関してはオブジェクトが1個で済む、みたいな話

515 :デフォルトの名無しさん:2014/09/20(土) 11:49:12.14 ID:GbFNl7YA.net
後者でもいいじゃなくて後者じゃなきゃならない

516 :デフォルトの名無しさん:2014/09/20(土) 22:47:50.29 ID:lCrKyNEm.net
>>483
foo='bar'
じゃなくて
foo='@bar'
なら
eval("#{foo}='hoge'")
p @bar #=> "hoge"

517 :デフォルトの名無しさん:2014/09/20(土) 23:31:15.19 ID:Om5aQ121.net
C, Java, Perl が解ってる人向けの ruby 学習サイト、どこがいい?

518 :デフォルトの名無しさん:2014/09/20(土) 23:33:09.44 ID:U6pDraTi.net
>>514
>[{"title" => "BOOK1", "price" => 1200},
>{"title" => "BOOK2", "price" => 800}, ...]
>だと "title" という文字列オブジェクトが、
>配列要素の数だけ生成されてしまうので

こんな非効率なことをするかな?
もし本当なら、シンボルを使わないと大変なことになる!

519 :デフォルトの名無しさん:2014/09/20(土) 23:46:46.17 ID:U6pDraTi.net
>>517
たのしいRuby、第4版、2013

この本を買って、20時間で十分できるようになる

520 :デフォルトの名無しさん:2014/09/21(日) 00:11:57.30 ID:GWO0XyTs.net
>>519
ありがと。

521 :デフォルトの名無しさん:2014/09/21(日) 00:27:09.27 ID:WGiJkvuD.net
>>518
実用上は問題はない

こんな微小な文字列の保持数が問題になるような規模のデータをデータベースじゃなくコレクションで表現しようとするのなら、
文字列以外の部分、検索とか列挙とかそのへんが先に破綻する

まさかと思うがリテラルで書くわけではない

522 :デフォルトの名無しさん:2014/09/21(日) 06:37:38.36 ID:WGiJkvuD.net


523 :デフォルトの名無しさん:2014/09/21(日) 19:57:12.73 ID:htYINMDv.net
どんなに不正確で評判悪くてもGoogleでは「Ruby 入門」あたりで上位に来るからな
すくなくとも最初だけはリアル書籍が無難だと思う

524 :デフォルトの名無しさん:2014/09/21(日) 20:42:01.34 ID:0KJk1NSh.net
EgoProwlってアプリ?が使ってみたくて、ド初心者ながら調べてやっと実行してみたんですが、

egoprowl:61:in `initialize': undefined method `key?' for ["Application", "Twitter"]:Array (NoMethodError)
from egoprowl:685:in `new'
from egoprowl:685:in `block in <main>'
from egoprowl:684:in `each'
from egoprowl:684:in `<main>'

というエラーが出て使えません…
yml以外は弄らずに実行したんですが、Twitterの仕様変更で使えなくなったのか、
何か弄らないと使えないものなのか、分かりません
環境は Rumix(1.9.3) Windowsです。。

525 :デフォルトの名無しさん:2014/09/21(日) 22:11:57.50 ID:AJStoUCj.net
RubyでCGIを書いてHTMLの<img>タグから呼び出しているのですが、LoadErrorが発生してしまいます。
問題のコードは次のとおりです。

require 'rubygems'
require 'RMagick' #←この行が問題

print "Content-type: image/gif\n\n"
open("hoge.gif", "rb"){|hoge| print(hoge.read) }

サーバにsshで入ってコマンドラインで実行する分には特に問題無く動くのですが、HTTP経由で呼び出すと動きません。
どういった原因が考えられるでしょうか。お願いします。

526 :デフォルトの名無しさん:2014/09/21(日) 22:27:22.07 ID:POp695WM.net
>>525
シェルで環境変数消してやってみたら。

527 :デフォルトの名無しさん:2014/09/21(日) 22:50:30.28 ID:AJStoUCj.net
>>526
ありがとうございます。
環境変数GEM_HOMEが正しく設定されていなかったようです。

528 :デフォルトの名無しさん:2014/09/21(日) 22:53:37.94 ID:9m2mBLrL.net
>>525
以下のCGIプログラムを実行してみる

print "Content-type: text/plain&yen;n&yen;n"
p $LOAD_PATH

529 :デフォルトの名無しさん:2014/09/21(日) 22:54:17.64 ID:q4aLc9F7.net
>>524
いじった YAML がたぶんおかしい
例えばハッシュを期待してるところに配列指定してるとか
require 'yaml'
p YAML.load_file(configfile)
とかして調べてみて

530 :527:2014/09/21(日) 23:14:28.45 ID:9m2mBLrL.net
リロードするんだった...orz

531 :デフォルトの名無しさん:2014/09/22(月) 15:16:56.38 ID:KNrUDz/6.net
ちまちまテキストエディタでプログラミングの練習してるんですが
どういうタイミングで統合開発環境を導入するのが適切でしょうか

532 :デフォルトの名無しさん:2014/09/22(月) 15:19:06.99 ID:xorcTHrm.net
なければなしで問題ない

533 :デフォルトの名無しさん:2014/09/22(月) 15:57:56.64 ID:1Qvd4ihP.net
IDE使ってたけど、結局テキストエディタに戻ってるわ。

534 :デフォルトの名無しさん:2014/09/23(火) 03:07:12.39 ID:BCdHmEgh.net
>>529
ありがとうございます!
何故か一文字消えてました…

535 :デフォルトの名無しさん:2014/09/23(火) 17:51:19.68 ID:miRT+bCi.net
pryを試してみようと思って
Ruby-2.1.2-p95 Microsoft Installer Package(2014-5-08 revision 45877改)入れて
gem install pry でインストールしたんだけど起動しようとすると
win32consoleのバージョンがおかしいとかエラーが出て起動できない

536 :デフォルトの名無しさん:2014/09/23(火) 17:53:51.18 ID:R40YBrw8.net
そうですか
書き込みありがとうございます
次の方どうぞ

537 :デフォルトの名無しさん:2014/09/24(水) 02:14:09.44 ID:Z6uf6PR9.net
会社のPCはうまくいったのにおかしいなと思いつつ
Ruby Installerも入れて試してみたらこっちはpryが動いた

538 :デフォルトの名無しさん:2014/09/24(水) 11:11:32.11 ID:JaI0d9II.net
クラスのインスタンス変数の クラスをどうしても制限、指定したいとき (true or falseとか)、代入メソッド書き換える以外に何か方法ある?
そもそもそんなことしない?

539 :デフォルトの名無しさん:2014/09/24(水) 11:13:26.84 ID:y/ivUGFr.net
インスタンス変数の型束縛

540 :デフォルトの名無しさん:2014/09/24(水) 19:32:08.36 ID:D01/L6XM.net
>>538
マニュアルにでっかい字で書いとく

めちゃくちゃ一般的には、trueオブジェクトやfalseオブジェクトとの内部比較分岐はしてはいけない
× if @var == true then ...
○ if @var then ...
nil のときと false のときで動作変えたいとか nil のときと [] のときで動作変えたいとかそんなことは「してはいけない」し
指定されたオブジェクト以外をユーザーが代入するかもしれないとかはいちいち考えてはいけない
例外が出て落ちれば充分
例外が出ずに終了すれば及第点
変なオブジェクトで変な動作になっても自己責任

実際問題として、モックのようなオブジェクトを使いたい場合がよくある
「たかが」変数や引数を綿密なクラスチェックでがんじがらめに縛られるとたいへん不便
自分の敷いたレール以外を許さないのならJavaでやれやカスが、とか文句言いたくなる

541 :デフォルトの名無しさん:2014/09/24(水) 21:42:52.25 ID:zzs5VNXT.net
やっぱそんなことしないんですねー
分かりました

542 :デフォルトの名無しさん:2014/09/26(金) 08:10:51.24 ID:IheVza1r.net
MUST NOTというよりはSHOULDレベルでは

543 :デフォルトの名無しさん:2014/09/27(土) 02:38:41.07 ID:k4QoHySE.net
やれってことか

544 :デフォルトの名無しさん:2014/09/27(土) 11:28:13.77 ID:wa8RbSiE.net
>>540
>自分の敷いたレール以外を許さないのならJavaでやれやカスが、とか文句言いたくなる
これはおかしい。rubyでは型よりも命名規則でレールを敷くことが多いが
どちらが良いかはどのようなフレームワークを作ろうとしているかによる。

545 :デフォルトの名無しさん:2014/09/29(月) 12:39:09.55 ID:1eoAu9jp.net
rubyのfalse nilの両方が負になるのは、明らかにrubyの闇
配列とかハッシュ内でfalseも使ってコードかいてるとハマるって程じゃないけど
>>540のいってるような
@var == false とか書きたくなるよ

546 :デフォルトの名無しさん:2014/09/29(月) 12:47:07.12 ID:sAVGRibI.net
「負」ってなんだよ、
JavaScriptの用語で言うところの「falsy valueである」ってことを言いたいんだろうけど。

この程度のことも正確に表現できない奴が「闇」とかちゃんちゃらおかしい。

547 :デフォルトの名無しさん:2014/09/29(月) 12:52:57.33 ID:PkV280SH.net
x 負
o 偽

どうせ負論理か何かと間違えたんだろ

548 :デフォルトの名無しさん:2014/09/29(月) 13:46:53.16 ID:mH0hN6se.net
そもそもRubyでfalse trueってどういうときに使うの?
普段使わないからnilと混ざることもなくはまったことがない

549 :デフォルトの名無しさん:2014/09/29(月) 14:54:58.84 ID:GOwFfu+y.net
nilは未定義やメソッドの返り血として返す値がない場合に使うし、
falseは偽であることを明確にしたい場合に使っているな
それとnil falseを区別したい場合はobj.nil?があるんだから
それ使えばいいんじゃないかな

550 :デフォルトの名無しさん:2014/09/29(月) 19:03:52.12 ID:0qyZ7Y3Q.net
ひぃー返り血

551 :デフォルトの名無しさん:2014/09/29(月) 19:52:46.04 ID:ir6Np6gb.net
>>548
メソッドの戻り値として使う
foo? の戻り値が true か false みたいな感じ
yardとかで説明で書かれるところのBoolean

もちろんnilとfalse以外のオブジェクトは全部真だから、理屈上はfoo自体の結果を返してもよい
ただ、これやるとマニュアル書くのめんどいしget_foo_valueみたいなのの代わりに使うアホが出るしなによりirbでめっつァ不便
良い例:
irb> obj.foo?
true
悪い例:
irb> obj.foo?
#<MyFooObject:0xb7c0dcc8 @val1=#<AnotherObject ...>
@val2=なんか長いすっごい長いデータ @content=[] @userdata1=nil @userdata2=nil @userdata3=nil >

「def foo?; !!@foo; end」って書くのカッコ悪いとかいうくだらない理由で
@fooを直接返しちゃうダメな感じの製作者がいるが真似してはいけません

552 :デフォルトの名無しさん:2014/09/29(月) 20:42:29.30 ID:WcW3+aLQ.net
>>551
1.nonzero?

553 :デフォルトの名無しさん:2014/09/29(月) 22:56:25.00 ID:Kh9spxWx.net
超巨大なCSVを作成したいです。
したみたいにすると、CSVに必要な行がすべてメモリに乗るようでめっちゃスワップします。
少しずつ書き込む方法ってないでしょうか?

CSV.open(filename, 'w') do |line|
menbers.each{|menber|
line << menber.to_array
}

554 :デフォルトの名無しさん:2014/09/30(火) 00:56:07.65 ID:Gbi7LNU3.net
ありますよ

555 :デフォルトの名無しさん:2014/09/30(火) 02:17:48.38 ID:8M9GxsYT.net
初歩的な部分ですがフィールド配列の外部参照がよく分かりません。
@array = Array.new
と宣言してある外部クラスをインスタンス化して
ins.array[0]=10 等とアクセスしようとしてるのですが、
undefined method `[]' for nil:NilClass (NoMethodError)と出ます。
何が間違っているのでしょうか?

556 :デフォルトの名無しさん:2014/09/30(火) 02:30:15.47 ID:Ogo7WMyz.net
ソース貼ってみ

557 :デフォルトの名無しさん:2014/09/30(火) 02:56:18.12 ID:4TmfBnqZ.net
>>553
一般的にファイルは、一度に全部を読み込まない
一度に全部を読み込むと、
クラッカーに大きいファイルを送りつけられて、
システムダウンさせられてしまう

4KBなどの小さいバッファを使って、
ファイルから小刻みに読み込みながら処理する
動画や音楽の再生などはそう

IOオブジェクトの、read(size)で読み込むサイズを指定できる
他にも、1文字ずつ、1byteずつ、1行ずつ処理するとか

558 :デフォルトの名無しさん:2014/09/30(火) 03:14:45.25 ID:8M9GxsYT.net
>>556

class ClassA
@array = Array.new
attr_accessor:array
end

instance = ClassA.new()
instance.array[0]=10
puts(instance.array[0])
とアクセスを確認するだけの単純なものです
同じクラスの以下のコードは普通に表示されるのですが
array2=Array.new
array2[0]=10
puts(array2[0])

559 :デフォルトの名無しさん:2014/09/30(火) 03:21:26.11 ID:MXlztEU0.net
>>546
死ね
>>547 真偽の 偽のこといった

560 :デフォルトの名無しさん:2014/09/30(火) 03:46:11.59 ID:1IRD/DgB.net
http://docs.ruby-lang.org/ja/2.1.0/class/WEBrick=3a=3aConfig.html
この辺
ハッシュでfalseとnilを使い分けてる

こういうのを真似して自分で関数作ったりすると引数とったメソッド野中では
こんなことになりかねない

if @var.nil?
nilの処理
elsif @var
trueの処理
else
falseの処理
end

さらにfalseを優先して書きたい場合こうなっててもおかしくない

if @var == false
falseの処理
else
それ以外
end

こういうのがあるから、未定義だったらnilなのにデフォルトはfalseですとかやってるメソッドは
その引数がnilとfalseで同じ挙動なのか違うのか確証がない

同じだったらそもそもfalse使うなって思うけど

561 :デフォルトの名無しさん:2014/09/30(火) 03:59:49.80 ID:Ogo7WMyz.net
>>558
http://ref.xaio.jp/ruby/classes/module/attr_accessor
これ見りゃわからないかな?

562 :デフォルトの名無しさん:2014/09/30(火) 05:09:52.18 ID:LJ2oQclU.net
>>555
Rubyにはフィールドはない
あなたにそれをフィールドだと教えた悪い参考書や参考サイトを使ってるようだから全部捨てろ
とりあえず話はそれから

563 :デフォルトの名無しさん:2014/09/30(火) 05:15:08.37 ID:4TmfBnqZ.net
>>558
>@array = Array.new
変数名に、arrayなどの既存の名前を使わない方がよい
arr に変えるよ

@arr = Array.new
Array.newだけなら、要素数0
p arr で表示してみ

@arr = Array.new(3)
これなら、要素数3
p arr で表示してみ

Array.new を参照

564 :デフォルトの名無しさん:2014/09/30(火) 06:08:26.11 ID:3C5m2+5+.net
>>553
members のサイズはどのくらい? 超巨大だったりしない?

565 :デフォルトの名無しさん:2014/09/30(火) 07:08:13.41 ID:uzsgHcDm.net
>>558
class ClassA
@array = Array.new # <- ここが間違い

これだと @array は「ClassA」というオブジェクトのインスタンス変数になる
君が欲しいのは「ClassAのインスタンス」というオブジェクトのインスタンス変数だろう

class ClassA
def initialize
@array = Array.new
end

とすれば解決するはず

566 :デフォルトの名無しさん:2014/09/30(火) 07:35:27.09 ID:Gbi7LNU3.net
は?

567 :デフォルトの名無しさん:2014/09/30(火) 10:08:03.27 ID:UKkIwkr4.net
>>558
あれ?ってなって確かめたら上のレスの通りだった
ttp://ideone.com/9AXpGD
スコープに注意

568 :デフォルトの名無しさん:2014/09/30(火) 14:58:07.85 ID:8M9GxsYT.net
>>565
ああ、なるほど上手く動きました。
rubyではインスタンス変数として使うなら
def initializeに書いたりする必要があるんですね。

質問なのですが、「ClassA」というオブジェクトのインスタンス変数、
というのはクラス変数とどう違うのでしょうか?

569 :デフォルトの名無しさん:2014/09/30(火) 15:01:48.64 ID:JjKI4EMd.net
インスタンスは、異なる値で複数存在可能

570 :デフォルトの名無しさん:2014/09/30(火) 15:19:36.61 ID:KHlaSvzj.net
>>568
ttp://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fvariables.html#class
>クラス変数はクラス自身のインスタンス変数とは以下の点で異なります。
>・サブクラスから参照/代入が可能
>・インスタンスメソッドから参照/代入が可能

571 :デフォルトの名無しさん:2014/09/30(火) 15:36:45.31 ID:8M9GxsYT.net
>>570
参照範囲で使い分ける感じですかね。
教えていただきありがとうございました。

572 :デフォルトの名無しさん:2014/09/30(火) 20:39:00.96 ID:JU1j3mFE.net
ガチ小中学生に煽られて、ガチ小中学生に教えたり、教わったりするスレになってるけど大丈夫?
こういうところに大人がもしも未だに混ざってるならオワコンですよ

573 :デフォルトの名無しさん:2014/09/30(火) 21:13:32.58 ID:m29MN2Ah.net
>>572
ネットに限らず情報というものは
相手の肩書にとらわれず
内容を各々判断するものだ
それが出来なら朝日新聞でも読んでればいい

574 :デフォルトの名無しさん:2014/10/01(水) 00:41:57.59 ID:zzunZpfz.net
お子様は親父がボーナスで買ったPC-9800でBASICを嗜むものだろう。

575 :デフォルトの名無しさん:2014/10/01(水) 11:27:38.11 ID:OJSGbkdS.net
フムフムヌクヌクアプアアみたいな奴だな

576 :デフォルトの名無しさん:2014/10/02(木) 19:02:32.09 ID:EmIzxk1A.net
File.delete(@temp) if File.exist?(@temp)
の部分で`exist?': can't convert nil into String (TypeError)
というエラーが出てしまうのですが、解決方法がわかりません。

ubuntu14.04
ruby1.9.3p484です

577 :デフォルトの名無しさん:2014/10/02(木) 19:26:18.52 ID:Nbqny9/i.net
まずはエラーの内容を翻訳してみようー

578 :デフォルトの名無しさん:2014/10/03(金) 00:22:46.82 ID:8ZCfX4zK.net
「存在する?」:
皆無をストリング(TypeError)に変換することができません。

579 :デフォルトの名無しさん:2014/10/03(金) 00:29:30.66 ID:i0V0nK+8.net
>File.delete(@temp) if File.exist?(@temp)
>の部分で`exist?': can't convert nil into String (TypeError)
nil型を、String型に変換できない(型エラー)のかな?
@tempに値が何も入っていないのでは?

File.delete(@temp) if File.exist?(@temp)
この行の前に、
p @temp してみ。nilになってる?

Rubyを全然、わかっていないのなら、
たのしいRuby、第4版、2013
を読んでから、プログラミングした方が速い

580 :デフォルトの名無しさん:2014/10/03(金) 07:22:21.94 ID:d+M1zPQO.net
> nil型を、String型に変換できない(型エラー)のかな?
Rubyを全然わかっていないのはどっちだよ

581 :デフォルトの名無しさん:2014/10/03(金) 09:37:53.93 ID:ncSYSBhR.net
特異メソッドを定義したときに
メソッドfuga内から、
Hogeの名前を取得する方法がわからず、
教えてください。

class Hoge
class << self
def fuga
....
end
end
end

582 :デフォルトの名無しさん:2014/10/03(金) 12:18:43.89 ID:zwNCTHT6.net
お断りします
   ハハ
   (゚ω゚)
  /  \
((⊂ )  ノ\つ))
   (_⌒ヽ
   ヽ ヘ |
εニ三 ノノ J

583 :デフォルトの名無しさん:2014/10/03(金) 12:20:42.30 ID:zwNCTHT6.net
p ancestors
フムフムヌクヌクアプアアみたいな奴だな

584 :デフォルトの名無しさん:2014/10/03(金) 12:36:09.34 ID:iohOSMY+.net
>>576
exist?は、引数に与えたファイルパス文字列のファイル名が存在するかどうか調べるメソッドだよね
で、この行の中でエラー文の“string”に関係しそうなのは、パス文字列のつもりで与えた引数の@temp
なのでこの場合は、引数@tempの中身がうっかり“nil”とやらになってんじゃないか?と疑い、前出の通り“p @temp”を入れて調べるのがまず第一

“type error”とか“argment error”とか出てきたら、とりあえずその行の引数とか変数調べてみればいいよ

585 :デフォルトの名無しさん:2014/10/03(金) 18:40:26.63 ID:LkYraUGE.net
>>581
文字列として取得したいならば self.to_s とか to_s とか

586 :デフォルトの名無しさん:2014/10/03(金) 22:12:19.49 ID:x4vX3Y5M.net
>>583
>> 584
ありがとうございます。

587 :デフォルトの名無しさん:2014/10/04(土) 11:53:38.36 ID:pzA2eR9p.net
日帝の残滓が作った言語

588 :デフォルトの名無しさん:2014/10/04(土) 20:40:54.60 ID:M66Mgi8t.net
そんなふうに色めがねでみるのは論理ではない。もっとこころを透明にしてください。
プログラミングには、論理的な思考が必要

589 :デフォルトの名無しさん:2014/10/05(日) 00:41:36.89 ID:QzEV7fmk.net
>>557
>>564

返信遅れて申し訳ない。
メモリの挙動を監視するとCSVが一発で読み込まれてるようにしか思えなかった。
上の例のmenber変数はかなり巨大なハッシュだけどCSVに入れる前にARRAYにしておいても
CSV書き込みでとてつもないメモリを消費する。
複数回に分けて追記すればいいのかな

590 :デフォルトの名無しさん:2014/10/05(日) 00:45:06.70 ID:QzEV7fmk.net
menberはハッシュじゃなくて自分で定義したクラスでした。
最初にmenber全部ARRAYにしてからCSVに書き込もうとするとメモリがやばいので
to_arrayを定義して逐次的にCSVに書き込んでます

591 :デフォルトの名無しさん:2014/10/05(日) 00:55:17.19 ID:QzEV7fmk.net
失礼
CSVが一発で読み込まれているのではなく。
CSVの書き込み用バッファが4K確保されて書き込まれて、次の4kに進むのではなく
一気に全部確保されている気がする。
このため書き込みたい内容を一度メモリ上ですべて確保してる気がする

592 :デフォルトの名無しさん:2014/10/05(日) 01:31:33.72 ID:IUlRSCDi.net
>>589-591
お前わざとやってるだろw

593 :デフォルトの名無しさん:2014/10/05(日) 01:59:12.81 ID:MFOvIang.net
コードの断片だけ見せられてもな
menbersのクラスも分からんし
menbers.eachかmenber.to_arrayが原因じゃねーの?
まあ最大のバグはmenberのスペルなんですけどね

594 :デフォルトの名無しさん:2014/10/05(日) 13:26:52.71 ID:sdXqIouw.net
男たちのビット誤り率という意味かもしれん

595 :デフォルトの名無しさん:2014/10/05(日) 13:28:42.98 ID:FZuSwsnO.net
男どもの過ち‥奴らは何を間違えたのだろうか?

596 :デフォルトの名無しさん:2014/10/05(日) 14:49:48.27 ID:QzEV7fmk.net
ぐは

597 :デフォルトの名無しさん:2014/10/05(日) 17:01:45.15 ID:XrIDkgzN.net
xx

598 :デフォルトの名無しさん:2014/10/06(月) 23:26:34.77 ID:OEPOtQ0D.net
ほんと馬鹿な質問で、ここで聞くのも大変申し訳無いんだが、

今日やさしいRuby という本を買ってきて、まずRubyのバージョンを確認しろという指示があった

具体的には、「macを使っている人は、まずコンソールを起動します。コンソールを起動するには、Finderからターミナルを選んでください。rubyのバージョンを調べるには、ruby-v
と入力し、必要なオプションを加えます」と書いてある。

この ruby-v と入力し必要なオプションを加えます というものがどういう動作かわからない。

とりあえず、このメモ帳みたいなターミナルの画面の続きに、ruby -v と入力してenterキーを押すと、

-bash: -v: command not found と 表示されるだけ。本来ならRubyのバージョン情報が出てくるらしいんだが、何が間違っているのだろうか?コンソールに入力する、という文章も
あるが、コンソールと思われるものを開いても、そもそも何かを入力できる箇所がなく、ログなどがずらっと並んでいるだけ。

macは標準のコマンドとしてRubyが利用できるとのことなので、Rubyのインストールという行為はやっていない。

599 :デフォルトの名無しさん:2014/10/06(月) 23:47:18.60 ID:OrurmOLO.net
>>598
ターミナル起動して bash のプロンプト($ マーク)の右に ruby -v って入力して enter すると

$ ruby -v
ruby 2.0.0p481 (2014-05-08 revision 45883) [universal.x86_64-darwin13]

みたいに表示されるはず
うまくいかなければスクリーンショットを貼ってくれると話が早い

600 :デフォルトの名無しさん:2014/10/07(火) 00:02:31.37 ID:mh2mjaxD.net
>>598
ちなみに「ログなどがずらっと並んでいるだけ」のやつはその本でいうところの「コンソール」とは違うから気にしなくていい
多分全部「ターミナル」と読み替えていい

601 :デフォルトの名無しさん:2014/10/07(火) 00:02:38.09 ID:A7b9XBsz.net
初心者は無理せずWindows使えよ
実はプログラマにはWindowsの方がフレンドリー
コンソールやターミナル、とか用語が安定しなくて迷ったりしないですむ

602 :デフォルトの名無しさん:2014/10/07(火) 00:13:52.75 ID:dLpFFXt+.net
Windows普通に環境構築大変じゃね?
Macだと最初からruby入ってる

603 :デフォルトの名無しさん:2014/10/07(火) 00:54:44.80 ID:OE9FEeTe.net
windowsでruby書く人って居るのか?
聞いたことない

604 :デフォルトの名無しさん:2014/10/07(火) 01:12:14.80 ID:YQhu9gFf.net
winとrubyは絶対にやってはならない組み合わせの一つ

605 :デフォルトの名無しさん:2014/10/07(火) 01:13:32.04 ID:YQhu9gFf.net
というか、Windowsのほうがプログラマにフレンドリー発言でRuby使ったことないのがもろ(ry

606 :デフォルトの名無しさん:2014/10/07(火) 07:08:20.75 ID:TyujhZt1.net
Rails とか複雑なことしようとしないなら、インストーラもあるし Windows でも十分使える

607 :デフォルトの名無しさん:2014/10/07(火) 07:30:12.70 ID:5iNhE6Cu.net
Windowsをはずしたら、負けることになる(死にます)

608 :デフォルトの名無しさん:2014/10/07(火) 09:01:44.10 ID:cA1BC5is.net
>>598
買って来たやさしいRubyの版数
使っているOS XのVersion
X codeのVersion
commandline toolsのインストールの有無
を書け。
まずはそれからだ。

その本を使うためにhomebrewとrbenvを入れる必要が出るだろうけどな。

609 :デフォルトの名無しさん:2014/10/07(火) 09:06:59.09 ID:Jaq4UASp.net
>>598
-vってコマンドを実行したいって思われてるな。
rubyの前に、ls、cd、catという基本的なコマンドを使う練習から始めてみてはどうだろう。

610 :デフォルトの名無しさん:2014/10/07(火) 10:25:54.57 ID:JVM430wV.net
>>598
http://dotinstall.com/lessons/basic_unix
コマンドの勉強ならこのサイトがいいんじゃないかな。
動画で説明してるからわかりやすいと思う。

611 :デフォルトの名無しさん:2014/10/07(火) 19:10:46.04 ID:RfEYvcpp.net
params[:body] が 半角英数字のみ(つまり日本語文章ではないかどうかを判断したい)か
どうかを簡単にチェックする方法を教えてください

612 :デフォルトの名無しさん:2014/10/07(火) 19:51:50.70 ID:TyujhZt1.net
>>611
Railsスレとマルチすんな

613 :デフォルトの名無しさん:2014/10/07(火) 20:03:27.32 ID:Lth77BfJ.net
マルチポストだったか
ヌケヌケと答えてしまうところだった

614 :デフォルトの名無しさん:2014/10/07(火) 22:12:43.85 ID:KzNWKz7K.net
どうせ壁打ちと大差ないのにマルチだけは気にするゴミ

615 :デフォルトの名無しさん:2014/10/07(火) 22:21:38.40 ID:lactWcAJ.net
壁打ちってどういう比喩?

616 :デフォルトの名無しさん:2014/10/07(火) 22:38:55.76 ID:BlA3KCzr.net
別板の質問見かけたときにコピペするだけで荒らせるんだから安いもんだと思う

617 :デフォルトの名無しさん:2014/10/08(水) 12:51:11.03 ID:RGealQpg.net
↑これが壁打ち

618 :デフォルトの名無しさん:2014/10/08(水) 14:05:31.36 ID:WR+D1wBU.net
>>611
ヒント: 正規表現

619 :デフォルトの名無しさん:2014/10/08(水) 17:18:55.98 ID:qx5li64a.net
Struct使うメリットを教えてください。setter,getterは他の言語に比べるとRubyはattr_accessorがあるので簡単だと思うのですが。
class Point
attr_accessor :x, :y
end
class Area < Point
end

class Area < Struct.new(:x, :y)
end
この2つの違いを教えてください

620 :デフォルトの名無しさん:2014/10/08(水) 17:34:36.72 ID:vDUa8S4h.net
簡潔に書ける

621 :デフォルトの名無しさん:2014/10/08(水) 19:06:34.65 ID:5mBaIux9.net
アクセサ以外のメソッドも定義されなかったっけ?
あれ、気のせい?

622 :デフォルトの名無しさん:2014/10/08(水) 22:02:54.67 ID:0CbvvJCh.net
Struct の方は Enumerable モジュールが include されるのと、
initialize を定義しなくても new で各メンバの初期化が出来る

attr_accessor の方は Enumerable を取り込まないため
Enumerable 由来のメソッドが大量に定義されないで済む

個人的には Struct が好みだけど、一般的には attr_accessor の方が利用されている

623 :デフォルトの名無しさん:2014/10/10(金) 22:57:37.90 ID:hLe2xq4/.net
10月から、プログラミングをはじめた者です。
本当に初歩の初歩だと思うんですが、、お答え願えませんか?

s = "My name is Monar"
s = s.split
p s[0] # => M
p s.class = # => String

a = s.split
p a[0] # => My
p a.class => Array

Stringをsplit したものを何かにぶち込むと配列になるのでしょうか?
そういうものだ、って解釈でよいのでしょうか。

624 :デフォルトの名無しさん:2014/10/10(金) 23:05:19.35 ID:j7rjXjTe.net
>>623
お前が寝ぼけてるだけ
もう一度落ち着いてそれ実行してみろ

625 :デフォルトの名無しさん:2014/10/10(金) 23:21:19.86 ID:hLe2xq4/.net
>>624

うわ。ほんとだ。寝ぼけてただけでした。
ほんとすいません。

s = "My name is Monar"
p s.class # => String
p s[0] # => M
s = s.split(" ")
p s[0] # => "My"
p s.class # => "Array"

これでした。すいません。
stringをsplitすると、配列オブジェクトになるってのはあってますか?

626 :デフォルトの名無しさん:2014/10/10(金) 23:29:13.14 ID:Mhk11MXA.net
ドキュメント見れば一発やで

627 :デフォルトの名無しさん:2014/10/11(土) 00:17:24.24 ID:t1ONSAIz.net
[1] pry(main)> require 'time'
=> true
[2] pry(main)> DateTime.new(1970,1,1)
=> #<DateTime: 1970-01-01T00:00:00+00:00 ((2440588j,0s,0n),+0s,2299161j)>
                    ↑+00:00
[3] pry(main)> DateTime.new(1970,1,1).to_time
=> 1970-01-01 09:00:00 +0900
              ↑+0900 ファ!?

628 :デフォルトの名無しさん:2014/10/11(土) 00:19:51.34 ID:bs/sFubV.net
日本時間

629 :デフォルトの名無しさん:2014/10/11(土) 12:01:18.49 ID:WAdfmHXI.net
夏時間終わっててよかったな

630 :デフォルトの名無しさん:2014/10/11(土) 13:04:18.34 ID:GOKZHlwE.net
ブロックの書き方でdo〜end形式の方が{〜}形式より推奨される理由は何ですか?
rubocopもバシバシ警告してくるのですがイマイチ理由が分かりません。

631 :デフォルトの名無しさん:2014/10/11(土) 13:44:55.56 ID:2iP0q5Ek.net
嫌なら{}で良いんだよ

632 :デフォルトの名無しさん:2014/10/11(土) 13:48:39.52 ID:7ki1LAY5.net
>>630
http://stackoverflow.com/questions/5587264/do-end-vs-curly-braces-for-blocks-in-ruby

633 :デフォルトの名無しさん:2014/10/11(土) 14:58:29.97 ID:9vsymaaR.net
>>625
s = "My name is Monar"
s = s.split(" ")を使うと、
文字列が空白で分割されて、配列の0〜3に格納される

[My,name,is,Monar]

>>630-632
ブロックが1行なら、{ }の方が見やすい
複数行なら、do〜endを使う

634 :デフォルトの名無しさん:2014/10/11(土) 15:14:29.24 ID:7ki1LAY5.net
>>633
アンカつけるならリンク先読んでちょ
あと My じゃなくて "My" ね

635 :629:2014/10/11(土) 18:35:23.61 ID:GOKZHlwE.net
>>632
やっぱ優先順位から見ると{}の方が自然に思えますよね。
「複数行だとdo end」も見た目のこだわり以上の理由はないと理解しました。

636 :烏有(uyuu) ◆/uuWdTQ106 :2014/10/11(土) 18:40:20.18 ID:fozbFsv6.net
壁ドンのやり方で柱〜ふすまの方が{ドア}部分をドンするより推奨される理由は何ですか?
家族もバシバシ警告してくるのですがイマイチ理由が分かりません。

637 :デフォルトの名無しさん:2014/10/12(日) 02:07:30.17 ID:2D7VEq3z.net
うるさい

638 :デフォルトの名無しさん:2014/10/12(日) 02:23:45.11 ID:LsklK5Cs.net
>>635
open obj.filename do |file|
# open()に渡されるブロック
end
open obj.filename {|file|
# obj.filename()に渡されるブロック
}
これだけ見ると do 〜 end の結合度のが自然に見えない?
どっちか片方だけが自然、って訳ではないと思う

639 :烏有(uyuu) ◆/uuWdTQ106 :2014/10/12(日) 04:40:30.30 ID:iENiuObx.net
>>637
やっぱ優先順位から見ると{ドア}ドンの方が自然に思えますよね。
「複数回だと壁 ドン」もドンの音のこだわり以上の理由はないと理解しました。

640 :デフォルトの名無しさん:2014/10/12(日) 14:23:41.50 ID:MraGD/gc.net
自分はブロックも引数の一種だとおもってるから
引数が二つ以上あるのにカンマがないのはおかしいので↑は自然とは思わないなあ
↓のfilenameがselectとかmapとかのときを考えると↓の結合度が自然だと感じる

まあどっちにしろそんなわかりにくい結合させずに括弧で明示するけどね

641 :デフォルトの名無しさん:2014/10/12(日) 16:06:02.65 ID:Yv9TiAGs.net
英語っぽく見せかけるためだけのもので
冗長なうえ結合度が違うのは害悪ですらある
637は要らぬ混乱を招くとても悪いスタイルだから真似しちゃダメ

642 :デフォルトの名無しさん:2014/10/12(日) 21:26:34.17 ID:Tx1BX1Kd.net
個人的には、複数行か否かで分けるのではなく
戻り値を扱うかどうかで書き分けてるな〜

643 :デフォルトの名無しさん:2014/10/12(日) 22:15:56.50 ID:ElJnU/0K.net
>>642
俺もそうだな
戻り値を使うなら {}、使わないなら do..end だな

644 :デフォルトの名無しさん:2014/10/13(月) 05:27:00.26 ID:j90eBv3o.net
戻り値というか副作用の有無で分けてる

645 :デフォルトの名無しさん:2014/10/13(月) 13:11:18.96 ID:xzr2gdng.net
副作用で思い出したのだがpushやpopに!が付かないのは
何か歴史的な経緯があるのかい?

646 :デフォルトの名無しさん:2014/10/13(月) 13:15:20.64 ID:j90eBv3o.net
対応する非破壊版がないから
後でそれを追加できないという破綻した命名規約だけどね

647 :デフォルトの名無しさん:2014/10/13(月) 13:27:29.45 ID:yFRqmPNp.net
後で追加する可能性が無いんじゃない

648 :デフォルトの名無しさん:2014/10/13(月) 14:06:45.14 ID:qSnkJX9/.net
>>645
正確な経緯は知らんけど、Lisper な Matz には副作用や参照透明性みたいな
概念を重要視していなかった(=深く考えていなかった)だけだと思う

>>646
命名規則が破綻したケースの例としては、ハッシュを更新する破壊的メソッド Hash#update に
後から非破壊メソッドを追加できずしかたなく Hash#merge! と Hash#metge を追加した、
というのがあるね

649 :デフォルトの名無しさん:2014/10/14(火) 07:50:28.20 ID:FY2dMxGy.net
pushやpopはどう考えても機能名称的にpushやpopという単語だろうという縛りがないでもない
まあ今も昔も深く考えてないというのは間違いないと思うが
今だって標識くらいの見かけ的な役割だもんね ! と ?

650 :デフォルトの名無しさん:2014/10/15(水) 21:56:04.60 ID:0iTmmfe+.net
普段は非破壊的メソッドを使い、危険を冒す価値のある場所だけに使う。
何か問題があれば!を検索して集中的に調べる。
Immutableなコレクションしか持たない言語よりも柔軟で実用的だと思うんだ。
これはrubyの好きな点の一つなので、!のルール付けは徹底してほしいところだ。

651 :デフォルトの名無しさん:2014/10/15(水) 23:39:21.06 ID:KzNnpQwi.net
delete!とか?

652 :デフォルトの名無しさん:2014/10/16(木) 07:30:36.81 ID:GRIRO8vO.net
updateのaliasにupdate!を付けるのはあとから幾らでも出来る
逆が出来ないから困るって話をしてるんだが

653 :デフォルトの名無しさん:2014/10/16(木) 10:25:27.96 ID:qnIoh31O.net
馬鹿には無理

654 :デフォルトの名無しさん:2014/10/16(木) 10:31:38.08 ID:6hon/NKm.net
>>652
逆ができないってどういうこと?
aliasを付けることはどっちもできるし
ソース上で不統一だとどっちの場合も同じように困ると思うんだけど
何に困ってるの

655 :デフォルトの名無しさん:2014/10/16(木) 15:55:07.15 ID:CsOFEKWu.net
44 デフォルトの名無しさん [sage] 2014/10/13(月) 13:11:18.96 ID:xzr2gdng Be:
副作用で思い出したのだがpushやpopに!が付かないのは
何か歴史的な経緯があるのかい?

645 デフォルトの名無しさん [sage] 2014/10/13(月) 13:15:20.64 ID:j90eBv3o Be:
対応する非破壊版がないから
後でそれを追加できないという破綻した命名規約だけどね

656 :デフォルトの名無しさん:2014/10/16(木) 15:56:08.66 ID:CsOFEKWu.net
命名規則が破綻したケースの例としては、ハッシュを更新する破壊的メソッド Hash#update に
後から非破壊メソッドを追加できずしかたなく Hash#merge! と Hash#metge を追加した、
というのがあるね

648 デフォルトの名無しさん [sage] 2014/10/14(火) 07:50:28.20 ID:FY2dMxGy Be:
pushやpopはどう考えても機能名称的にpushやpopという単語だろうという縛りがないでもない
まあ今も昔も深く考えてないというのは間違いないと思うが
今だって標識くらいの見かけ的な役割だもんね ! と ?

657 :デフォルトの名無しさん:2014/10/16(木) 17:18:05.50 ID:MV7SzJpM.net
破壊的メソッドは戒めを込めて delete!!!!!!!!!!! にしておくべきだった

658 :デフォルトの名無しさん:2014/10/17(金) 02:16:25.49 ID:EUFGtU/Q.net
Windows7上でruby2.0.0 p451のgemを使ってnokogiriをインストールしようとしましたが
うまくいきません。ネットでやると失敗します。

で、「Rubyによるクローラ開発」って本に、そういうときはコンパイル済みバイナリをローカルに
置くのがいい、とあったので、rubygem.orgからx86-mingw32というのを取って来て実行してみた
のですが、
Unable to resolve dependencies: nokogiri requires mini_portile
ってエラーが出て進まなくなってしまいます。
環境が悪いんでしょうか? みなさんとこ上手くインストールできてます?

659 :デフォルトの名無しさん:2014/10/17(金) 04:56:18.47 ID:lMkb3UyL.net
nokogiri requires mini_portile

660 :デフォルトの名無しさん:2014/10/17(金) 07:48:33.50 ID:tubR575L.net
そのエラーメッセージを和訳するんだ

661 :デフォルトの名無しさん:2014/10/17(金) 07:49:03.51 ID:XvOfVc4r.net
>>657
トニー・ジャーか…?
マッハ!のタイトルっぽいな

662 :デフォルトの名無しさん:2014/10/17(金) 08:10:47.98 ID:QP1DIUi6.net
>>658
環境が悪いとすれば君の生まれ育った環境が悪いんだろう

663 :デフォルトの名無しさん:2014/10/17(金) 08:21:15.00 ID:4+0nBHRN.net
絶滅しそうなプログラミング言語は?
http://developers.slashdot.jp/story/14/10/10/2155216/

環境が悪いせいかやっぱ滅び行く言語みたいだな

664 :デフォルトの名無しさん:2014/10/17(金) 11:49:30.34 ID:Q41qEvOL.net
嬉しそうですね

665 :デフォルトの名無しさん:2014/10/17(金) 11:53:45.91 ID:HZvg3la9.net
まあな

666 :デフォルトの名無しさん:2014/10/17(金) 15:50:56.69 ID:TIsdM5eD.net
Android上でスクリプトを動かしたいのですが、どんな選択肢がありますでしょうか。
Android上でコードを書き換えて動作させたりしたいと思っているので、Rubotoはちょっと方向性が違うと思っています。
よろしくお願いします。

667 :デフォルトの名無しさん:2014/10/17(金) 19:32:37.25 ID:HZvg3la9.net
SL4A

668 :デフォルトの名無しさん:2014/10/17(金) 21:07:26.92 ID:j5u0ESS9.net
>>666
>Android上でコードを書き換えて動作させたりしたいと思っているので、Rubotoはちょっと方向性が違うと思っています。

意味不明だな
Ruboto IRB(無償 Android アプリ)を使えば、「コードを書き換えて動作させたり」できるよ
メソッドやクラスの定義はもちろん、Ruboto IRB 上で GUI を生成して動かせる

・Ruboto IRB : 過去最大の衝撃。これは凄い!!AndroidでRubyが動く!!Androidアプリ427 | オクトバ
 http://octoba.net/archives/20100305-ruboto-irb-android-427.html

Roboto IRB で対話的に Android API を色々と触りつつ、本格的なアプリは PC 上の
Ruboto または RubyMotion(現状はベータ版)でクロス開発するというプロセスになると思われる

669 :デフォルトの名無しさん:2014/10/17(金) 23:42:47.60 ID:4+0nBHRN.net
だせえ
すぐ潰れそう

670 :デフォルトの名無しさん:2014/10/18(土) 08:36:09.60 ID:cvL+Wsv6.net
>> 666
ありがとう、試してみます。

>> 667
PCでRubyをコンパイルしてAndroidで動かす仕組みだと勘違いしていました。
ご指摘いただきありがとうございます。

671 :デフォルトの名無しさん:2014/10/19(日) 20:19:35.03 ID:vOhlo+XI.net
OCRAで32bitバイナリと64bitバイナリを生成したいのですが
何か良い方法はないでしょうか?
何もオプションを付けないと64bitバイナリが生成されるようですが・・・
2.0.0p481[x64-mingw32]

672 :デフォルトの名無しさん:2014/10/20(月) 01:41:16.45 ID:6j05cluu.net
ocraで作ったバイナリってウイルス検出されちゃうことがあるなんて話があったけど、
大丈夫なのかな? 個人環境で起きるなら良いんだけど、会社だとセキュリティ担当に
自動で通報されちゃうので説明したりとちょっと大事になるので面倒くさい。

673 :デフォルトの名無しさん:2014/10/20(月) 06:54:15.02 ID:v2I1VvBQ.net
ocraってRuby2.1以降とか動かんでしょ

674 :デフォルトの名無しさん:2014/10/20(月) 19:46:50.69 ID:kEWHmjOP.net
お蔵入り

675 :デフォルトの名無しさん:2014/10/24(金) 23:57:31.15 ID:pwlehayb.net
数学的な意味で整数かどうか判定する方法教えてください
1.0.integer?
だとfalseが返ってきてしまいます

676 :デフォルトの名無しさん:2014/10/25(土) 00:09:39.99 ID:L2ksR7r0.net
a = 1.0
a.floor == a # => true

a = 1.1
a.floor == a # => false

こういうこと?

677 :デフォルトの名無しさん:2014/10/25(土) 08:32:50.27 ID:j6rbe9Rw.net
質問者が「数学的に」と言ってきてるのだから
複素数にも対応してあげるのが親切ってもんだろう。
そこはfloorでもceilでもなくto_iだな。

678 :デフォルトの名無しさん:2014/10/25(土) 08:34:28.50 ID:8yzcXx0W.net
>>676
誤差考えるとなあ

irb(main):006:0> a=Math.sqrt(27)/Math.sqrt(3)
=> 3.0000000000000004
irb(main):007:0> a.floor==a
=> false

679 :デフォルトの名無しさん:2014/10/25(土) 08:37:31.51 ID:Osfk0YxR.net
ん?aは整数じゃないから正しいんでは?

680 :デフォルトの名無しさん:2014/10/25(土) 09:19:46.12 ID:NijgTWso.net
計算を全部Rationalでやったうえでdenominatorが1だったら整数
もしくは
require'mathn'
とかかなあ

681 :デフォルトの名無しさん:2014/10/25(土) 12:30:31.13 ID:9i0hi/co.net
>>679
√27 ÷ √3
= 3√3 ÷ √3
= 3
を a に代入
以下略

682 :デフォルトの名無しさん:2014/10/25(土) 12:36:41.68 ID:cqm+9BdH.net
irb(main):006:0> a=3*Math.sqrt(3)/Math.sqrt(3)
=> 3.0000000000000004

わろた

683 :デフォルトの名無しさん:2014/10/25(土) 13:23:01.23 ID:Osfk0YxR.net
>>681
それが3になってないからfalseで正しいじゃん

684 :デフォルトの名無しさん:2014/10/25(土) 13:39:00.78 ID:NijgTWso.net
無理数が入る計算はどうあがいても誤差が出るだろうなあ
累乗根とかの無理数をその場で計算せずそのままあつかうようなクラスを個別に定義していけば
そのうち全部誤差なしにできるかもね(もちろん最終的に有理数になる場合)

>>683
人間が計算すれば3になるからtrueを得たいってことでしょ

685 :デフォルトの名無しさん:2014/10/25(土) 14:21:19.99 ID:L2ksR7r0.net
>>678
無理数が入るものを有限桁しか持てない計算機で計算させるんだから、
その誤差を考えて計算させないと意味が無い
これはRubyに限った話じゃなく、計算機に計算をさせる上で必ず考慮しなければ
ならないポイント

686 :デフォルトの名無しさん:2014/10/25(土) 14:47:58.38 ID:B/NlI7do.net
>>682
$ python
>>> from math import sqrt
>>> 3 * sqrt(3) / sqrt(3)
3.0000000000000004

Prelude> 3 * sqrt 3 / sqrt 3
3.0000000000000004

julia> 3*sqrt(3)/sqrt(3)
3.0000000000000004

そういうものだよ
カッコでくくるといいかもね

687 :デフォルトの名無しさん:2014/10/25(土) 15:03:54.32 ID:L2ksR7r0.net
EPS = 1e-10
(a.round - a).abs < EPS

みたいにやるのがよくある方法だね
(ただしaがそれほど大きくないという条件はつくけど)

688 :デフォルトの名無しさん:2014/10/25(土) 16:10:16.86 ID:OBw5xvhC.net
それだと整数にならないケースも整数だと誤検出する可能性を排除できない

689 :デフォルトの名無しさん:2014/10/25(土) 16:55:42.43 ID:5nT/ZQiN.net
>>677
Complex#to_iは虚数部が0じゃない時はRangeError吐くから
もう少し工夫しないといけない気がする

690 :デフォルトの名無しさん:2014/10/25(土) 17:42:04.77 ID:Osfk0YxR.net
>>684
>>675は計算の仕方を聞いてるわけじゃないだろ

691 :デフォルトの名無しさん:2014/10/25(土) 19:46:48.42 ID:L2ksR7r0.net
>>688
有限桁の計算機で計算する以上、無理数が混じった計算で整数かどうかを正確に
判定することなんてできないよ

692 :デフォルトの名無しさん:2014/10/25(土) 19:50:06.84 ID:/9oTGPcj.net
バカにはムリw

693 :デフォルトの名無しさん:2014/10/25(土) 19:51:20.02 ID:TvGWFX6/.net
無理数使いたいなら記号計算しかないな
そういうアカデミックな世界はPythonの方が環境整ってるからおすすめ

694 :デフォルトの名無しさん:2014/10/25(土) 20:55:31.74 ID:OBw5xvhC.net
sympyいいね

695 :デフォルトの名無しさん:2014/10/25(土) 21:43:14.43 ID:AJUIP7QM.net
浮動小数点は対数曲線上に、
まるで点のように飛び飛びに存在しており、
数学の実数のようには、数が連続していない

また数が大きくなるほど、2点間の距離も大きくなっていき、
最後には2点間の距離は、1よりも大きくなり、1を足せなくなる
また2点間にある値は、どちらかに丸められて表現される

>>687
絶対誤差と相対誤差という概念もある
1,000で1の誤差と、1.0で0.001の誤差は、
1/1,000という同じ誤差

696 :デフォルトの名無しさん:2014/10/26(日) 20:04:28.62 ID:z1XaoFmt.net
coreserverにredmineを入れてfcgiで動くようにしたつもりだけど500 errorでて動かなくてrubyわからなくて涙目
どうやってデバッグしたらいいの?

697 :デフォルトの名無しさん:2014/10/26(日) 21:06:23.46 ID:e33XAUxV.net
>>696
web server のログを見てみよう

698 :デフォルトの名無しさん:2014/10/26(日) 21:24:15.67 ID:z1XaoFmt.net
サーバーのログは500だけ。
redmine/log/production.logはアクセスしても更新されてないです。
なぜだ。

699 :デフォルトの名無しさん:2014/10/26(日) 21:25:42.86 ID:e33XAUxV.net
>>698
web server のエラーログだよ

700 :デフォルトの名無しさん:2014/10/26(日) 21:57:12.33 ID:z1XaoFmt.net
coreserverは/var/logのパーミッションが
drwx--x--x 6 root root
で一般ユーザーには見れません。

ほかのところで見れるのかな

701 :デフォルトの名無しさん:2014/10/26(日) 21:57:13.28 ID:BCpeePeb.net
>>696
coreserverってレンタルサーバか。CGIしか動かないんじゃないの。rackとかいじれば動くかもしれないけど、planioとか設置済みの借りたほうがいいんじゃないの。

702 :デフォルトの名無しさん:2014/10/26(日) 22:08:53.22 ID:z1XaoFmt.net
>>701
sshでログインして色々できるので
~/usr/以下に
ruby-2.1.3
subversion-1.8.10
fcgi-2.4.1
make-4.0
libtool-2.4.2
など、依存関係、バージョンアップが必要なやつらを入れてやって
ようやくエラーなくbuild installできたり
require 'fcgi'でのーさっちふぁいる言われなくなったところです。

703 :デフォルトの名無しさん:2014/10/26(日) 22:09:41.87 ID:z1XaoFmt.net
まちがえた
bundle installやった。

704 :デフォルトの名無しさん:2014/10/27(月) 01:56:33.97 ID:AAN1U1FS.net
heroku使えばいいのに。

705 :デフォルトの名無しさん:2014/11/01(土) 10:53:07.72 ID:KbCSRqlI.net
ある1万桁程度のBignum同士の乗算が
実際の値とは異なるものになってしまうのですが、何故なのでしょうか?
ruby-2.1.3 とruby-2.1.4 で動作を確認しました。
OSはvistaです。

706 :デフォルトの名無しさん:2014/11/01(土) 11:00:20.69 ID:3nVvYlYV.net
動かしたコードを貼りなよ
codepadとかに

707 :デフォルトの名無しさん:2014/11/01(土) 11:48:23.78 ID:KbCSRqlI.net
お返事ありがとうございます。
具体的には、高速で階乗を求めるソースを考えている時に起こりました。
http://codepad.org/uMrdmWoQ
上のソース(numの階乗を出力)で、5688以上の階乗を求めようとすると誤った値が出力されます。

原因を調べたところ、いつくかの乗算の結果がおかしなことになっていました。
その例です↓
http://codepad.org/Evm4WIzw

なお、codepad上では正しく動いています。

708 :デフォルトの名無しさん:2014/11/01(土) 11:59:15.57 ID:KbCSRqlI.net
追記です。
1.8.7
1.9.3
2.0.0
では正常に動くことを確認しました。

709 :デフォルトの名無しさん:2014/11/01(土) 12:42:09.57 ID:JDs1edib.net
>>708
2.1 のバグだね、きっと
↓にしたがってバグ報告しましょう

https://bugs.ruby-lang.org/projects/ruby/wiki/HowToReportJa

710 :デフォルトの名無しさん:2014/11/01(土) 13:08:03.38 ID:E0YeAKNc.net
こんな基本的なところでデグレードとか、ほんとRubyは信用ならないな。
やはり科学技術計算ならPythonか。

711 :デフォルトの名無しさん:2014/11/01(土) 13:12:37.62 ID:JDs1edib.net
>>710
そう思ってるならRubyスレなんか覗かなきゃいいのに
単純に叩くネタを探しにきてるだけなのかい?

712 :デフォルトの名無しさん:2014/11/01(土) 13:13:46.50 ID:tAp5B7hH.net
だって計算機科学とか全く無知な人でもrubyをある程度触ってればコミッタになれちゃんだもの

713 :デフォルトの名無しさん:2014/11/01(土) 13:18:44.69 ID:NzxKzmT+.net
Webアプリどっぷりな人って基礎技術舐めてる子が多いからな

714 :デフォルトの名無しさん:2014/11/01(土) 14:18:25.31 ID:KbCSRqlI.net
>>709
どうもありがとうございました!!

715 :デフォルトの名無しさん:2014/11/01(土) 16:57:13.22 ID:Bg+qUaZT.net
error_logを別ファイルに吐かせる方法ってありますか?

716 :デフォルトの名無しさん:2014/11/01(土) 18:33:01.35 ID:dJZLIuNK.net
trunk では直ったようだね

717 :デフォルトの名無しさん:2014/11/01(土) 20:35:05.70 ID:dJZLIuNK.net
>>710
Bignum は 2.1 で結構変わった部分だから、単純なデグレードではないね
むしろ、新機能と言ってもいい部分

なので、今回のようなバグ報告はありがたいだろうね

718 :デフォルトの名無しさん:2014/11/02(日) 05:24:22.27 ID:Vf5VSDSD.net
Pythonは、Rubyを目の敵にしている
Rubyさえ消えれば、Pythonの1強だから

鬼畜米英に対して、今こそ、日本人として立たねばならぬ!
全国民は何があろうと、Rubyを死守せよ!

719 :デフォルトの名無しさん:2014/11/02(日) 06:47:27.44 ID:LNjYg/LZ.net
>>718
Out of guntyuu.

720 :デフォルトの名無しさん:2014/11/02(日) 06:56:13.27 ID:ihJb2jjw.net
>>718
環境の問題でRuby使ってるけど、
正直、使えるならPython使いたいわ

721 :デフォルトの名無しさん:2014/11/02(日) 10:39:25.45 ID:f5IAMfRc.net
>>718
使いたくない
>>720
俺も

722 :デフォルトの名無しさん:2014/11/02(日) 10:55:35.21 ID:6vShOxas.net
PythonにゃロクなWebのFWがないからねぇ
Rails(か最悪はPHP)を使わざるを得ないことも多いんだね

723 :デフォルトの名無しさん:2014/11/02(日) 10:59:49.55 ID:f5IAMfRc.net
>>722
結局そういう事だよねー

724 :デフォルトの名無しさん:2014/11/02(日) 11:01:48.93 ID:LNjYg/LZ.net
>>722
逆にdjangoがあるからpythonを選ぶくらい。

725 :デフォルトの名無しさん:2014/11/02(日) 11:03:11.62 ID:6vShOxas.net
>>724
Pythonがいい言語なのは同意できるが、Djangoは同意できないw

726 :デフォルトの名無しさん:2014/11/02(日) 11:04:07.50 ID:ihJb2jjw.net
Pythonって書いてて余計なことに気を使わなくても
それなりに簡潔で読みやすいコードになるんだよな
RubyはWordで体裁気にしながら文章書いてるような気持ちの悪さを感じる

727 :デフォルトの名無しさん:2014/11/02(日) 11:09:10.69 ID:6vShOxas.net
>>726
その部分ではPythonもRubyも大差ないなー
Rubyで簡潔で読みやすいコードにならないというなら、単純にRubyを知らないだけちゃうんかって感じ

だが、Perlよ、お前だけはだめだw

728 :デフォルトの名無しさん:2014/11/02(日) 11:14:46.34 ID:ihJb2jjw.net
>>727
RubyはPython以上に簡潔で読みやすいコードを書けるけど、
使い方によってはPerlにもなるでしょ
良し悪しの問題ではないけどPythonと一番思想が違うところ

729 :デフォルトの名無しさん:2014/11/02(日) 11:18:16.14 ID:6vShOxas.net
>>728
まさか単純にインデントベースのブロックのこと言ってるんじゃあるまいな?
だとすれば完全に好き嫌いの話でしかないぞ

そのレベルだと君が簡潔で読みやすいコードを書けるのはPythonとCoffeeScriptぐらいってことになる

730 :デフォルトの名無しさん:2014/11/02(日) 11:18:23.22 ID:LNjYg/LZ.net
>>725
そう? 言語としてはrubyのが好き。
djangoは標準でユーザー管理ついてるのと、かなりDRYなとこがいい。

731 :デフォルトの名無しさん:2014/11/02(日) 11:24:44.64 ID:4UwsIu6G.net
>>727
ぱ、Perlも読み易く書けば読み易く書けるし!

732 :デフォルトの名無しさん:2014/11/02(日) 11:25:18.61 ID:ihJb2jjw.net
>>729
ブロックに限らず、単にRubyの方が書き方にバリエーションが多いって言ってるだけだよ
両方使ってるならそれくらいは納得してくれるだろ?
俺はバリエーションが少ないほうが好みだ、それだけ

733 :デフォルトの名無しさん:2014/11/02(日) 11:41:20.62 ID:Ot4JK/1Q.net
教えてください
数字をEXCELの列の文字に変換するにはどうすればいいですか。

入力(数値) 0,1,2,3,…
出力(文字) A,B,C,…Z,AA,…,AZ,BA…,ZZ,AAA…

734 :デフォルトの名無しさん:2014/11/02(日) 12:01:36.32 ID:OPPSZIQK.net
n="A"
$_.times{n.succ!}

735 :デフォルトの名無しさん:2014/11/02(日) 12:23:24.95 ID:CjBmvnJw.net
CoffeeScript はむしろ Python より Ruby に似てる

736 :デフォルトの名無しさん:2014/11/02(日) 12:29:25.47 ID:CjBmvnJw.net
>>733
Base26 encoding

737 :デフォルトの名無しさん:2014/11/02(日) 14:37:28.26 ID:3t1Cscrq.net
それをRubyのせいにしてしまうのがだめだな
人には向き不向きがあるからそれならやめておけばいい

738 :デフォルトの名無しさん:2014/11/02(日) 14:44:31.57 ID:6vShOxas.net
>>733
n.to_s(26).tr('0-9a-p', 'a-z').upcase

739 :デフォルトの名無しさん:2014/11/02(日) 15:17:25.24 ID:3t1Cscrq.net
>>733
遅いしメモリ食うし最大値を考慮する必要があるけど単純
[*"A".."ZZZ"][n]

740 :デフォルトの名無しさん:2014/11/02(日) 16:19:28.15 ID:/OQ7HjUb.net
>>733
もっときれいにかけるのかな。
ついでに英字から数字を出力するのも作ってみた。

def column_code n
len = Math.log(25*n/26.0+1, 26).floor+1
p = n+1+2*26**len - ("1"*(len+1)).to_i(26)
p = p.to_s(26).tr('0-9a-p', 'A-Z')[1..-1]
return p
end

def column_decode s
len = s.length
p = ( ("B"+s).tr('A-Z', '0-9a-p') ).to_i(26)
q = ( "1"*(len+1) ).to_i(26)
return p+q-1-2*26**len
end

741 :デフォルトの名無しさん:2014/11/02(日) 17:13:03.61 ID:bNYsKDd8.net
無駄な計算が多かったので訂正

def column_code n
len = Math.log(25*n/26+1, 26).floor+1
return (n+(24*26**len+26)/25).to_s(26).tr('0-9a-p', 'A-Z')[1..-1]
end

def column_decode s
len = s.length
return s.tr('A-Z', '0-9a-p').to_i(26)+(26**len-26)/25
end

742 :デフォルトの名無しさん:2014/11/02(日) 18:21:25.77 ID:LNjYg/LZ.net
再帰で考えたが、>>734を見て挫けた。

743 :デフォルトの名無しさん:2014/11/02(日) 19:13:57.03 ID:B2VB/G2X.net
succを使うのが一番すっきりしてるしどうせ
5〜6桁目など存在しないのだからパフォーマンスも気にしなくてよいと思う。

744 :デフォルトの名無しさん:2014/11/03(月) 08:06:02.67 ID:UI06u95t.net
class Point3D < Struct.new("Point3D", :x, :y, :z)
ストラクトクラスをスーパークラスにするやり方が本に
上のように書いてあったのですけど
Point3DクラスがPoint3Dクラスを継承することになってもいいのでしょうか?

745 :デフォルトの名無しさん:2014/11/03(月) 10:54:32.79 ID:1DGR/mlS.net
作者に聞けよ

746 :デフォルトの名無しさん:2014/11/03(月) 11:48:48.65 ID:lYTbCh7P.net
>>745
お騒がせして申し訳ありませんでした。
自分で考えることとします。

747 :デフォルトの名無しさん:2014/11/03(月) 12:21:28.78 ID:VhC2rtBo.net
>>744
Struct.new("Point3D", :x, :y, :z) は Struct::Point3D になるから問題無い。

748 :デフォルトの名無しさん:2014/11/03(月) 12:24:39.05 ID:aZ1lF/ar.net
>>744
実際に試してみればいい

irb(main):001:0> class Point3D < Struct.new("Point3D", :x, :y, :z); end
=> nil
irb(main):002:0> Point3D.superclass
=> Struct::Point3D

Struct.new( .... ) というスタイルを使うと、クラスは名前空間 Struct の下で定義される
Point3D と Struct::Point3D は別のオブジェクトだから、
それらの間に継承関係が存在しても何ら問題はない

もちろん、以下のようなケースはエラーになる

irb(main):001:0> class Struct::Point3D < Struct.new("Point3D", :x, :y, :z); end
TypeError: superclass mismatch for class Point3D
from (irb):1
from /opt/local/bin/irb:11:in `<main>'

irb(main):001:0> class Point3D < Struct.new("::Point3D", :x, :y, :z); end
NameError: identifier ::Point3D needs to be constant
from (irb):1:in `new'
from (irb):1
from /opt/local/bin/irb:11:in `<main>'

749 :デフォルトの名無しさん:2014/11/03(月) 13:41:16.97 ID:Yqw0F9So.net
require 'timeout'
begin
 f = Fiber.new do
  timeout(1) do
   Fiber.yield
  end
 end
rescue
 p 1
end
begin
 f.resume
 sleep (2)
 f.resume
rescue
end

上記のコードで1が出力されるはずと期待していたら例外処理が補足されずに終了してしまいました。
sleep(2)でexecution expiredになるのは分かるんですが、何故補足されないんでしょうか?
Ruby2.0.0と2.1.4で試しましたが結果は同じでした。

750 :デフォルトの名無しさん:2014/11/03(月) 14:43:27.79 ID:IiZVKpQi.net
ある多次元の配列arrayに対して、要素数が不定のの配列indexを用いて
array[index[0]][index[1]]〜[index[-1]]の要素を操作したいのですが
何かうまい方法は無いでしょうか?

751 :デフォルトの名無しさん:2014/11/03(月) 15:24:11.59 ID:aZ1lF/ar.net
>>749
単純に timeout(1) へ与えたブロック内で Fiber.yield しているので
コンテクストが親に切り替わっているからだろ

自分でコンテクストを切り替えておいて、
それでもなお元のコンテクストでタイムアウト例外を補足できると期待するという
>>749 の思考回路がわからん
Ruby はエスパーではないから >>749 の意図を読み取って振る舞ってはくれないし、
コンテクストを切り替えろというコードの指示に従って忠実に動いているだけ

自分が何を意図してコードを書いているのか、よく考えたほうがいいと思う

752 :デフォルトの名無しさん:2014/11/03(月) 15:27:42.87 ID:IO/fHbsZ.net
例外が上がるのはf.resumeの実行以降だからまずはp 1の位置が違う(下のrescueにすべき)と思うけど
なぜかTimeout::Errorじゃない無名のクラスになってて補足できてないね・・・なぜだろう誰か詳しい人

コンテクストが親に切り替わっても例外は上がるんだね
俺よくわかってないや

>>750
こんな感じ?
取得
index.inject(array){|s,r|s[r]}
設定
index[0..-2].inject(array){|s,r|s[r]}[index[-1]]=x

753 :デフォルトの名無しさん:2014/11/03(月) 15:41:58.79 ID:aZ1lF/ar.net
>>750
0、1、とくれば次に期待するのは 2、3、と増加する振る舞いだと思うけど、
なぜか -1 になっている
すまんが、-1 になれる上手い方法は思いつけない

ちなみに 0、1、ときて最後に N へ到るという多次元配列であれば、

(0..N).inject(array) { |ary, n| ary[index[n]] }

でアクセスできると思う

754 :デフォルトの名無しさん:2014/11/03(月) 15:42:39.68 ID:IiZVKpQi.net
>>752
ありがとうございます!!
indexを使うといいんですね。

755 :デフォルトの名無しさん:2014/11/03(月) 15:47:23.48 ID:IiZVKpQi.net
>>753
説明が下手ですみません。
大変参考になりました。ありがとうございます。

あと>>754はindexじゃなくてinjectですね。

756 :デフォルトの名無しさん:2014/11/03(月) 15:47:46.99 ID:3kX/Tanu.net
>>752
悪かないがindexが無効範囲だったときにnilが返るのが不親切じゃないか?
多少ダサくてもindexチェックのついた高階関数にバラすのが良いように思う。

757 :デフォルトの名無しさん:2014/11/03(月) 15:55:53.88 ID:IO/fHbsZ.net
>>756
ご指摘通り確かに範囲外インデックスが入ってると落ちちゃうね
落ちずにnilを返すようにはできるけど、nilが入ってる場合と違いがわからんしなあ

高階関数で対応するイメージが湧かないので教えてほしい

>>755
ということで範囲外インデックスが入りえる場合は気を付けて!

758 :デフォルトの名無しさん:2014/11/03(月) 15:57:33.59 ID:Yqw0F9So.net
>>751-752
ありがとうございます、理由はよく理解できました。
という事でtimeoutのexception_classを指定してみた所、下のrescueで補足するようになりました。
バグではないのかと気になりますが、どうなんでしょうね。

759 :デフォルトの名無しさん:2014/11/03(月) 16:21:40.77 ID:aZ1lF/ar.net
>>758
>という事でtimeoutのexception_classを指定してみた所、下のrescueで補足するようになりました。

exception_classを指定しなくとも、>>749 のコードのままでも下の rescue で例外は補足されている
下の resucue というコードを rescue => ex; p ex へと書き換えれば、
#<Timeout::Error: execution expired> という出力を確認できるはず


>バグではないのかと気になりますが、どうなんでしょうね。

Fiber.yield でコンテクストを親に切り替えた後にタイムアウト例外が発生し、
その例外は切り替わった親の(=下の) resucue で補足されている

>>751 で書いたことを繰り返すけど、Ruby は>>749 のコードに従って忠実に動いているはずだ
それなのに、なぜこれをバグを感じるのか意味不明だね

760 :デフォルトの名無しさん:2014/11/03(月) 16:51:25.89 ID:UKuQYTWz.net
>>756-757
ありがとうございます。勉強になりました。

761 :デフォルトの名無しさん:2014/11/03(月) 17:02:08.57 ID:IO/fHbsZ.net
>>759
実行してみた?
色々言う前にまずは自分で書いた通り実行して確認してみなよ
なぜか例外にTimeout::Errorじゃない無名のクラスが投げられてきてて
rescue Exception とかしないと補足できないから

http://ideone.com/jtxDYd (p exと書いてみたけどエラーは変わらない)
http://ideone.com/9ctjA2 (Exceptionすべて補足すればいける)
http://ideone.com/0MytXY (757の書いた通りでもいける)

762 :デフォルトの名無しさん:2014/11/03(月) 17:03:48.53 ID:IO/fHbsZ.net
ずっと誤字ってたなw
正 捕捉
誤 補足

763 :デフォルトの名無しさん:2014/11/03(月) 17:11:36.03 ID:IO/fHbsZ.net
>>759
おお、こちらもいろいろ言う前に考えが足りなかった、すまん
ver違いで発生有無が違ったから、すでに修正されたバグなのかもしれん

上記の通り無名の例外が発生
1.9.3p547 (2014-05-14 revision 45962) [i386-cygwin]
2.0.0p481 (2014-05-08) [x64-mingw32]
2.0.0p481 (2014-05-08 revision 45883) [i386-cygwin]

正しくTimeout::Errorが発生
2.1.2p95 (2014-05-08 revision 45877) [i386-cygwin]

764 :デフォルトの名無しさん:2014/11/03(月) 17:12:32.08 ID:aZ1lF/ar.net
>>761
同じコードであっても、Ruby のバージョンによって振る舞いが変わるみたいだね

$ ruby1.9 timeout2.rb
prog.rb:13:in `sleep': execution expired from timeout2.rb:13:in `<main>'
$ ruby2.0 timeout2.rb
prog.rb:13:in `sleep': execution expired from timeout2.rb:13:in `<main>'
$ ruby2.1 timeout2.rb
#<Timeout::Error: execution expired>

765 :748:2014/11/03(月) 17:37:35.15 ID:Yqw0F9So.net
2.1.4でも結果は同じ、と書きましたが再度試した所捕捉しましたorz
恐らくpikで切り替え忘れてirbで実行したのが原因だと思います…
2.0系では駄目でしたが、2.1系なら大丈夫そうですね。

捕捉せず
ruby 2.0.0p481 (2014-05-08) [i386-mingw32]
ruby 2.0.0p594 (2014-10-27) [i386-mingw32]
捕捉
ruby 2.1.4p265 (2014-10-27 revision 48166) [i386-mingw32]

766 :名無しさん:2014/11/03(月) 22:33:03.64 ID:LLz3qGqs.net
rubyでgui(2dゲームを作りたい)構築できるいいgemありますか?
win8のcore i7です

767 :デフォルトの名無しさん:2014/11/03(月) 22:34:40.73 ID:UgEZQqgs.net
WindowsでRubyとか修行じゃない限りはやめとけ
素直にC#+XNAが吉

768 :デフォルトの名無しさん:2014/11/03(月) 22:40:36.85 ID:UgEZQqgs.net
…と思って調べたらXNAは終了なんだな
SharpDXとか?になるんだろうか

769 :名無しさん:2014/11/03(月) 22:47:27.00 ID:LLz3qGqs.net
デュアルブートでlinux入れたらましになりますかね?
hddも1tbあるので

770 :デフォルトの名無しさん:2014/11/03(月) 22:49:25.47 ID:UgEZQqgs.net
>>769
いまどきデュアルブートするぐらいならVM使った方がいいと思うけど…

771 :デフォルトの名無しさん:2014/11/03(月) 22:50:06.32 ID:x848GwYR.net
DXRubyがあるWindowsが一番向いてるじゃん

772 :名無しさん:2014/11/03(月) 23:34:46.76 ID:LLz3qGqs.net
それ試しましたが32bit版しか対応してないって怒られました>>771

773 :名無しさん:2014/11/03(月) 23:37:17.91 ID:LLz3qGqs.net
>>770
どっかでcygwinはエラーが多いと聞いた気がしましたが
なにか不都合ありますか?

774 :デフォルトの名無しさん:2014/11/04(火) 00:03:40.32 ID:WEGF7NZu.net
>>772
じゃあ32bit版も入れれば

775 :デフォルトの名無しさん:2014/11/04(火) 03:06:41.92 ID:30WYsMeZ.net
>>766-769
win8のcore i7なら仮想環境にするか、
USBから外付けHDD・USBメモリから、Linuxすれば?

win8で同一ディスクからのデュアルブートは、
UEFI・GPT・リカバリー領域など、
ややこしいことが一杯あって、win8を消してしまうかも!
あまり成功例を聞かない

776 :名無しさん:2014/11/04(火) 07:30:11.08 ID:3vhPZ6VF.net
>>775
そうします

777 :デフォルトの名無しさん:2014/11/05(水) 00:05:20.96 ID:AIrAdXYO.net
2Dゲーでもアクション系は作る気がせんなぁ。
GCが原因でカクついたりすると爽快感台無しになるし
そこでハマって調整に時間かかるとスクリプト言語選んだ
意味ないしで悩むところだ。

778 :デフォルトの名無しさん:2014/11/05(水) 09:49:19.03 ID:6cY/hPez.net
わかります

779 :デフォルトの名無しさん:2014/11/06(木) 00:52:04.32 ID:40Lk17ez.net
ファイルを読み込んで読み込んだものを","で分割したくて
File::open("./hoge") {|f|
while line = f.gets
end
lineAry = line.split(",")
}
って感じにしたのですが、undefined method `split' for nil:NilClass (NoMethodError)ってエラーが出てしまいわからなくなってしまいました
解決方法教えてください・・・・

780 :デフォルトの名無しさん:2014/11/06(木) 01:24:27.67 ID:tQmqHd/H.net
lineAry = File.open('./hoge').each_line.map { |line|
  line.chop.split(/,/)
}

781 :デフォルトの名無しさん:2014/11/06(木) 02:01:45.45 ID:4jfyym2c.net
>>779
その通り書いてあるものだとして、
while line = f.gets
end
を抜けているということは
line = f.getsがnilかfalseになっているということ
実際にはnilなわけだが、それに対して
line.split(",")
と"split"メソッドを呼び出してるけど、nilにはそんなメソッドはないよというエラー

while line = f.gets
  "処理"
end
というのをどこかで見て引っ張ってきたんだろうけど
これが意味してるところを理解しないと
getsというのがこの場合、ファイルを一行ずつ読み込むメソッドで、最後の行に達したらnilを返すようになってる
つまり、ファイルを一行読み込んでlineに代入。nilでなければ(ちゃんと読み込めてたら)"処理"を行うという意味

782 :デフォルトの名無しさん:2014/11/06(木) 02:29:54.61 ID:e2GU7rka.net
>>779
クラスメソッドのアクセスに :: は使わない。ドットを使う
while 〜 endはそれでないと動作しない目的以外では使わない。each(を元にした各種メソッド)を使う
ファイル内容の取得にgetsは通常使わない。readやeach_lineを使う
lowerCamelCaseはとりあえず使わないようにする。snake_caseを使う習慣をとりあえずつけとく ※オプション

RubyにはEnumerableをeachで回すという概念/クラスがあって、基本的には
配列やハッシュ.each do |一個|
# ここで一個をなんかする
end
または
配列やハッシュ.each{ |一個| #ここでなんかする }
という形になる

Fileクラスにはオープンしたファイル内容を全部読み込んで文字列として返すインスタンスメソッドreadや
改行だと思われるとこで適当に切って配列にして返すインスタンスメソッドeach_lineがある
なので、「ファイルを読み込んで読み込んだものを","で分割したい」を
「ファイルを開いて1行づつ読み込んでその行を","で分割して配列に格納する」または
「ファイルを開いてテキストファイル全体を","で分割して配列に格納する」と<翻訳>して
前者は>>780のように、後者なら
splited =File.open(path).read.split(/,/)
とか書く

処方箋としては「まともな解説を最初のほうから読む」くらいしか思いつかない
「ペダルを回すと前に進むらしいんですがどうすればいいですか!」とか言って自転車のペダルだけ手で回してる状態
まず跨って乗ってくれ

783 :デフォルトの名無しさん:2014/11/06(木) 18:10:15.86 ID:c7fp/oug.net
while line = f.gets
end
lineAry = line.split(",")

while line = f.gets
lineAry = line.split(",")
end

784 :デフォルトの名無しさん:2014/11/06(木) 18:20:26.70 ID:1AJgCGK+.net
>>783
動作しましたがlineAryに最後の行しか入っていません と言われるオチ

785 :デフォルトの名無しさん:2014/11/06(木) 23:16:51.51 ID:KqnzrEM2.net
readやreadlinesに漠然とした恐怖感を感じることが第一歩だ。
gcの動きは?セキュリティホールは?スクリプト言語も実は楽じゃない。

786 :デフォルトの名無しさん:2014/11/07(金) 06:04:19.34 ID:XfEMsduw.net
言語や出来合いのライブラリに頼りきってて裏の技術を意識しなくなるから
たまに必要になった時にそう感じるだけ

787 :デフォルトの名無しさん:2014/11/09(日) 06:33:32.65 ID:gF5CsO0E.net
安全圏で妥協すんのもダメ
完璧主義も破綻する
どっち付かずの中途半端主義者しか生き残れないゴミみたいなゲームまだやってんの?

788 :デフォルトの名無しさん:2014/11/09(日) 14:50:38.45 ID:ZDxM+nfG.net
>>780
chop より chomp の方が良いと思う。

789 :デフォルトの名無しさん:2014/11/10(月) 04:23:28.54 ID:nN3Hg8Jd.net
a << $_.split(",") while f.gets

790 :デフォルトの名無しさん:2014/11/10(月) 08:25:58.99 ID:jDCBd3CZ.net
以下のような、改行+カンマ区切りのCSVファイルなのか?
A,B,C
1,2,3
あ,い,う

それとも、改行はなく1行のみの、カンマ区切りなのか?
a,b,c,1,2,3,あ,い,う

791 :デフォルトの名無しさん:2014/11/10(月) 22:11:39.06 ID:8QediavH.net
rbenvのインストール方法を紹介しているページで、ruby-buildのインストール先が
~/.rbenv/plugins/rucby-build
になっているページが多くあるんですが
rucbyになっている意味って思い当りますか?
typoした情報が広まっちゃっただけですかね

792 :デフォルトの名無しさん:2014/11/10(月) 22:37:30.07 ID:BCpYGTgN.net
>>791
うひょおおおおおお
http://www.google.co.jp/search?num=50&lr=&hl=ja&q=rucby-build&nfpr=1&sa=X

793 :デフォルトの名無しさん:2014/11/10(月) 23:08:48.98 ID:LMH7nFF4.net
http://www.google.co.jp/search?q=rbenv+rucby&oe=utf-8&hl=ja&sa=X&&as_q&nfpr=1&spell

>>791
typoが広まっているのは立教大キャンパス?www

794 :デフォルトの名無しさん:2014/11/11(火) 00:12:22.99 ID:OobmUzAz.net
くっそわらたw
さすが三流大学

795 :デフォルトの名無しさん:2014/11/11(火) 22:24:32.20 ID:IKuwQGRa.net
ruby 2.1.3p242 (2014-09-19 revision 47630) [x64-mingw32]
class Test
def initialize(*arg)
end
end
Test.new(*Array.new(10 ** 5))

これが stack level too deep (SystemStackError)になってしまうのは何故なんでしょう?
何をスタックに積んでるのかまったくイメージできません。
ちなみにinitialize以外のメソッドでは、同様の書き方でも問題ないようです。

796 :デフォルトの名無しさん:2014/11/11(火) 22:41:18.34 ID:wcU8x7Ld.net
>>795
Ruby のメソッド呼び出しでパラメタの頭に * を付けると、パラメタを展開して渡す
つまり、

  Test.new(*Array.new(10))

というコードは、以下と同じ

  ary = Array.new(10)
  Test.new(ary[0], ary[1], ary[2], ary[3], ary[4], ary[5], ary[6], ary[7], ary[8], ary[9])

で、一般に手続き/関数/メソッドの引数は言語処理系内部のスタック上もしくはヒープ上に割り当てられる
Ruby の場合には、メソッド new によるオブジェクト生成時にはスタックを使っていて、
それがオーバーフローした(=システムスタックの上限を越えて溢れた)のだろうね

いずれにせよ、10 ** 5 個もの引数を渡すコードは非常識だから、予期しないエラーとなっても不思議ではない
>>795 のコードを

  Test.new(Array.new(10 ** 5))

と書き直せば(=パラメタの頭に付けた * を外せば)、期待した動作になるはずだよ

797 :794:2014/11/12(水) 11:49:56.88 ID:ltmCpT66.net
>>796
どうも引数全般がスタックを使ってるみたいですね
initialize以外大丈夫だと書きましたが、更に配列を増やすとやはりだめでした

お騒がせしました

798 :デフォルトの名無しさん:2014/11/12(水) 17:48:04.44 ID:rDz9L70As
[*1..10].map {|x| x.odd? ? x : nil }
こういうのもっとdryに書けませんか?
find_allにfindのifnoneがついたようなの。

799 :デフォルトの名無しさん:2014/11/13(木) 11:41:28.38 ID:0GszBHHH.net
C# ASP.NetがLinuxサーバーでも使えるようになって
Rubyみたく哀れな言語を使わなくてすむようになるのがうれしい

800 :デフォルトの名無しさん:2014/11/13(木) 12:07:29.72 ID:7ZjHj42h.net
なんでバカが湧いたのかと思ったらバトロワスレの次スレが立ってないのか

801 :デフォルトの名無しさん:2014/11/13(木) 14:19:37.64 ID:sincN6IC.net
RWC2014 島根の会場に来てる
なんか質問ある?

802 :デフォルトの名無しさん:2014/11/13(木) 17:40:34.42 ID:17cnbPeU.net
>>801
何か目新しい報告はあった?

803 :799:2014/11/13(木) 18:33:52.15 ID:sincN6IC.net
>>802
来週アメリカでなんか発表するらしいけど、教えてくんなかったorz

Ruby Prize 2014 受賞者は柴田さんだった

あと、.NETがオープンソース化されてるのは知らんかった。

804 :デフォルトの名無しさん:2014/11/14(金) 14:45:10.38 ID:Y6976A5Y.net
質問なんですが、

hairetsu.include?(/正規表現/)

が認識しないみたいなんですがいい代替案ありますかね?

805 :デフォルトの名無しさん:2014/11/14(金) 14:46:19.79 ID:rxnPKvOr.net
sorah

806 :uy:2014/11/14(金) 14:48:38.59 ID:jCz39Be/.net
ttp://www.nicovideo.jp/watch/sm7760141

ちょっと下ネタになってしまうのですが、
みんなとこの気持ちを共有したいというか

807 :デフォルトの名無しさん:2014/11/14(金) 14:51:11.05 ID:PoP9COyz.net
>>804
ary.grep /re/

808 :デフォルトの名無しさん:2014/11/14(金) 14:54:39.54 ID:Y6976A5Y.net
>>807
サンクス

809 :デフォルトの名無しさん:2014/11/14(金) 14:56:58.11 ID:oheSvaLq.net
array.grep(/正規表現/)
とかどうでしょう。

810 :デフォルトの名無しさん:2014/11/14(金) 14:58:09.85 ID:oheSvaLq.net
あ、すでに書かれてたスマン

811 :デフォルトの名無しさん:2014/11/15(土) 13:46:51.20 ID:s1wDRj1u.net
こういうインターフェースってウンコだと思う?

log("value"){ log(1); log(2); log("sub value"){log(3);} }

出力
log category: value
 1
 2
 log category: sub value
  3

812 :デフォルトの名無しさん:2014/11/15(土) 16:19:12.50 ID:RzrSosLr.net
親子関係はプログラミングではなく、階層構造の話

XML,JavaScriptのJQueryなどのレベルの話

813 :デフォルトの名無しさん:2014/11/15(土) 16:20:29.70 ID:x8Hc1054.net
>>811
pretty print が似たようなインタフェースのような気がする

814 :デフォルトの名無しさん:2014/11/15(土) 16:50:42.74 ID:gniD1qRI.net
俺だったらYAMLか何かで階層構造指定させるようにするかなぁ。
format =<<EOS
value:
- 1
- 2
- sub_value:
 -3
EOS

log(format)

815 :デフォルトの名無しさん:2014/11/17(月) 20:12:13.72 ID:Zff6ZJ9C.net
RubyのソースコードってUTF-8で書かれる事が多いけど
改行コードはみんなどれを使ってるの?
RoRがよく使われる→Linuxでのサーバで動かす事が多い→じゃあLFで
と思ってるんだけどどうなんだろ

816 :デフォルトの名無しさん:2014/11/17(月) 20:26:34.24 ID:KnCa0+eC.net
>>815
Linux上で書いてるしツール使うしLFだ。

817 :デフォルトの名無しさん:2014/11/17(月) 20:44:52.20 ID:Rk/OFXwa.net
ソースコードを公開するならLF
公開しないなら好きにせえ

ちなみに「UTF-8のテキストデータファイル」の改行はCRLFが好ましい
めんどくさいっすな

818 :デフォルトの名無しさん:2014/11/17(月) 22:49:11.65 ID:waLJuR/4.net
RORならCRLFだろ
フォームデータは大抵CRlFで送られてくるんだからDBもソースも統一すればいいじゃん

819 :デフォルトの名無しさん:2014/11/18(火) 00:07:31.51 ID:zO/+2tja.net
教えてください。
ruby -e 'puts $:'
というワンライナーは何をするものですか?

820 :デフォルトの名無しさん:2014/11/18(火) 00:41:56.74 ID:gfsRu8uJ.net
$LOAD_PATH を puts

821 :デフォルトの名無しさん:2014/11/18(火) 09:33:02.58 ID:zO/+2tja.net
818さん、ありがとうございました。

822 :デフォルトの名無しさん:2014/11/19(水) 00:24:48.78 ID:MmxntMff.net
医療プログラマーが超高難易度の免許制に / フリーソフトやオープンソースの無作為配布も全面禁止
http://fox.2ch.net/test/read.cgi/poverty/1416286592/

823 :デフォルトの名無しさん:2014/11/19(水) 15:03:51.14 ID:JZ2oYyd9.net
間違ってもRubyが採用されることはないから安心汁

824 :デフォルトの名無しさん:2014/11/19(水) 21:30:03.59 ID:bEK2kswG.net
Rubyで書かれたコードは負債
後で後悔することになる

825 :デフォルトの名無しさん:2014/11/19(水) 22:28:07.63 ID:eeZRz+g3.net
>>824
アンチRubyの悲痛な叫びが心地よい

826 :デフォルトの名無しさん:2014/11/19(水) 22:57:16.50 ID:W0VjaeDS.net
>>824
完璧な言語が出るまでコードを1行もかかない、あなた勝ち組ですね。がんばって勝ち続けてください。

827 :デフォルトの名無しさん:2014/11/19(水) 23:21:14.70 ID:pniQ/9rV.net
完璧な言語と比べなくても
Rubyは下の方だから

828 :デフォルトの名無しさん:2014/11/19(水) 23:27:57.56 ID:DTfPg3SF.net
ということにして、何もしない言い訳を言い続けるだけの一生を終わるのだろうなぁ、こういうバカって

829 :デフォルトの名無しさん:2014/11/19(水) 23:35:12.66 ID:tsrrXfqY.net
自分が見下してる言語のスレをわざわざ覗いてるような暇がある奴だ
察してやろうぜ

830 :デフォルトの名無しさん:2014/11/20(木) 00:03:37.59 ID:W0VjaeDS.net
とりあえずプラットフォーム限定の言語より上。

831 :デフォルトの名無しさん:2014/11/20(木) 00:32:02.49 ID:Po2bP3CX.net
Rubyは過剰にコンピュータリソースを消費し
地球温暖化を促進する人類の敵

832 :デフォルトの名無しさん:2014/11/20(木) 00:35:02.06 ID:wJ3BgpRF.net
少なくとも
・オブジェクト指向プログラミング
・関数型プログラミング
を学び&それを実践したいのであれば、
数あるスクリプト言語の中でも Ruby が最良の選択

(もしS式に拒否反応が無ければ Scheme 等のLisp族でもいいんだけどね)

833 :デフォルトの名無しさん:2014/11/20(木) 01:38:44.14 ID:Po2bP3CX.net
Rubyとか負債だから
今から始めるとか馬鹿

834 :デフォルトの名無しさん:2014/11/20(木) 02:12:28.23 ID:e9ZJqUMF.net
福岡ではRuby推してるな

835 :デフォルトの名無しさん:2014/11/20(木) 02:30:11.35 ID:wwhDP9Xo.net
>>833
こいつからジェンガを取り上げた奴は名乗り出ろ
せっかく一人で遊んでいたんだぞ

836 :デフォルトの名無しさん:2014/11/20(木) 07:04:02.44 ID:pbftQxxb.net
Rubyが関数型とか片腹痛いわ
これほどeach(=副作用)が多用される言語も珍しい

837 :デフォルトの名無しさん:2014/11/20(木) 07:16:53.48 ID:c59L+Vlf.net
言語のアンチになるひとたちの心理が分からない。嫌なら使わなければ良いだけ。

838 :デフォルトの名無しさん:2014/11/20(木) 11:04:10.34 ID:8q4P6WgW.net
国産というだけで、補助金つけたり採用するアホがいるからな
ちゃんと技術的に劣ったものであると啓蒙しないと

839 :デフォルトの名無しさん:2014/11/20(木) 11:26:45.76 ID:EmAWw9wC.net
2位じゃ駄目なんです

840 :デフォルトの名無しさん:2014/11/20(木) 11:34:28.77 ID:oY1GPGoB.net
>>836 慣れれば自然とmapになるけどな。

841 :デフォルトの名無しさん:2014/11/20(木) 17:04:35.26 ID:PQZG72rl.net
手続型のようにも関数型のようにも書けるからな
どっちかしか認めないような潔癖な人には使えんけど
自分で使い分けられれば柔軟性抜群

842 :デフォルトの名無しさん:2014/11/20(木) 17:49:56.50 ID:caZHrNzS.net
>>837
言語のアンチに見えるけど、中身は事大主義者。

843 :デフォルトの名無しさん:2014/11/20(木) 18:12:45.00 ID:IC7tS2EU.net
Rubyでなんか凄いことやった人がいるらしいね

844 :デフォルトの名無しさん:2014/11/20(木) 20:57:03.73 ID:/tpcb8RQ.net
>>843
いっぱいいるよ

845 :デフォルトの名無しさん:2014/11/21(金) 00:58:04.29 ID:giR2E1os.net
Rubyとか補助金なかったら使わないわ

846 :デフォルトの名無しさん:2014/11/21(金) 01:03:48.65 ID:60xXXhMX.net
補助金なんて貰えるの?

847 :デフォルトの名無しさん:2014/11/21(金) 04:06:02.72 ID:eKmyEZjy.net
しまね

848 :デフォルトの名無しさん:2014/11/21(金) 05:30:28.73 ID:cPEjXala.net
>>845
詳しく頼む
定期的にこの煽りがあるけど
単発ばっかで要領を得ないんだわ

849 :デフォルトの名無しさん:2014/11/21(金) 07:05:19.39 ID:sRt7xdzZ.net
変なのが居着いちゃったな

850 :デフォルトの名無しさん:2014/11/21(金) 07:45:59.05 ID:R5E6cwET.net
しま


851 :デフォルトの名無しさん:2014/11/21(金) 20:05:33.20 ID:TFSPfM6y.net
しまねのまぬけ?

852 :デフォルトの名無しさん:2014/11/21(金) 20:34:56.03 ID:cSM/9qCo.net
つまらないからやめた方が良いよ

853 :デフォルトの名無しさん:2014/11/22(土) 15:01:29.78 ID:Fg4QwLMY.net
ねんまつ

854 :デフォルトの名無しさん:2014/11/22(土) 17:55:36.10 ID:0Ov5Rq+L.net
馬鹿には無理

855 :デフォルトの名無しさん:2014/11/22(土) 18:07:21.85 ID:X2dPHIKP.net
meteorがver1.0になった今、Railsの存在意義が問われる

856 :デフォルトの名無しさん:2014/11/22(土) 21:17:33.94 ID:l5CnwIKY.net
meteorなんてまだまだだよ
もっとこなれてこないとね

857 :デフォルトの名無しさん:2014/11/24(月) 00:27:11.00 ID:kZ0WyWVZ.net
時刻指定で任意のコードを実行することって出来ますか? 時間分解能はsleepくらいはほしいです
sleepを連続して実行していくとどうしても誤差が蓄積してしまうので時刻で実行したいです

858 :デフォルトの名無しさん:2014/11/24(月) 00:52:06.38 ID:wCkEdUJA.net
そういうのはスクリプトの外でやるもんだ
cronなりタスクスケジューラなり

859 :デフォルトの名無しさん:2014/11/24(月) 01:59:17.24 ID:amuxOgLW.net
知らなかったからmeteor調べてみたけど、こりゃ凄いな
簡易なwebサービスは近い将来js以外要らなくなるのかな
rubyやrailsが古臭いjavaみたいに見えてきた

860 :デフォルトの名無しさん:2014/11/24(月) 03:28:29.31 ID:DrhgZmlI.net
バトロワスレに居着いてたjs厨か
うざいから他行け

861 :855:2014/11/24(月) 09:10:54.14 ID:kZ0WyWVZ.net
>>858
それだとシステムが複雑になりますし、時間の分解能にも不安があります
ストリーミングサーバー的なものを作っているので実時刻との同期は必須です
ひとまず実時刻との差を監視してsleepする時間を補正するようにしましたが
複雑さが増してスマートな実装ではないので時刻を指定して実行できればと
思います・・

862 :デフォルトの名無しさん:2014/11/24(月) 09:50:30.21 ID:Xgjgsylw.net
msec単位で実行時間の正確性保証するのはどのスクリプト言語でも無理だ。
RTOS+C言語/アセンブラの組み合わせぐらいしかない。

863 :デフォルトの名無しさん:2014/11/24(月) 23:54:21.50 ID:kSOFqGw4.net
コンソール(コマンドプロンプト)上でテキストを使った簡単なアニメーションを表示したいのですが
1画面分の描写(print)ですら時間が掛かってしまう上に、画面をクリアするとちらついてしまいます。
win32apiを使えばコンソール上でのダブルバッファリングもできるようですが……。
そもそもRubyでやることではないような気もするのですが、何か良い案は無いでしょうか。

864 :デフォルトの名無しさん:2014/11/25(火) 00:41:45.41 ID:k1lxDZb5.net
>>863
Linuxにする。

865 :デフォルトの名無しさん:2014/11/25(火) 00:42:34.00 ID:nXU8Vkzf.net
>>861
wheneverはどう?
結局cronだけど、rubyで書けるからシステムの一部っぽくできると思うけど

866 :デフォルトの名無しさん:2014/11/25(火) 02:10:00.66 ID:GhhP0JI7.net
>>863
HSP

867 :デフォルトの名無しさん:2014/11/25(火) 03:49:54.47 ID:hT+PxFm6.net
>コンソール(コマンドプロンプト)上でテキストを使った簡単なアニメーション
それを簡単だと思ってるのはお前だけだ
「パソコンに簡単な調理をさせたい」とか言ってるレベル

868 :デフォルトの名無しさん:2014/11/25(火) 04:38:41.54 ID:kfvoFU9d.net
「簡単なアニメーションを表示させること」を簡単だとは言ってないだろw

869 :デフォルトの名無しさん:2014/11/25(火) 04:47:13.37 ID:xqodwvk6.net
簡単と単純は違う
混同するな

870 :デフォルトの名無しさん:2014/11/25(火) 05:16:38.77 ID:5ygUTnCM.net
簡単な機械とか言うし突っ掛かるところでもないな

871 :デフォルトの名無しさん:2014/11/25(火) 05:29:17.43 ID:x/sCQWRu.net
>win32apiを使えばコンソール上でのダブルバッファリングもできるようですが

自分で解決策わかってるのに何で質問するかね

872 :デフォルトの名無しさん:2014/11/25(火) 06:58:35.14 ID:RMbmAFFA.net
http://www.rubydoc.info/github/luislavena/win32console/Win32/Console/API

873 :デフォルトの名無しさん:2014/11/27(木) 04:41:08.12 ID:6zp/+XUy.net
正規表現について質問があります。
リンク先のApacheのログ解析の話です。 http://pmakino.jp/tdiary/20070907.html
.*が最長一致ということは理解できたのですが、[^ ]*が最短一致になる理由がわかりません。
*が付いているので最長一致に見えるのですが。。
よろしくお願いします。

874 :デフォルトの名無しさん:2014/11/27(木) 05:24:29.91 ID:isFZ5zeq.net
* は0回以上の、+ は1回以上の最長マッチで、
*?、+? は最短マッチ

[^ ]* は空白以外の文字の最長マッチじゃないの?
試してみれば?
"abc def ghi" → "abc"

875 :デフォルトの名無しさん:2014/11/27(木) 05:24:39.10 ID:ureSvumC.net
>>873
先ず[^ ]がスペース以外の文字にマッチするということ。
リンク先読んでないが、
スペース以外の文字の繰り返しだから、スペースが出てきたら、そこまでしかマッチせず最短一致となる。
最長一致だとマッチ内容にスペースが含まれることがある。
よく後ろにその除外した文字が続く。
スペースわかりにくいので違う文字だと、.*_と[^_]*_の違い。

876 :デフォルトの名無しさん:2014/11/27(木) 07:00:47.62 ID:6zp/+XUy.net
>>874,873
なるほど、理解出来ました。ありがとうございます!

877 :デフォルトの名無しさん:2014/11/27(木) 07:21:17.53 ID:UAvli5hO.net
それ最短一致って言わねえから

878 :デフォルトの名無しさん:2014/11/27(木) 10:35:09.67 ID:4ox/+qp0.net
・REエンジンに最短一致が無い
・否定文字クラスを使って簡単に表現できる
という場合に最短一致ぽい感じでマッチさせるためのイディオム
かな?

879 :デフォルトの名無しさん:2014/11/27(木) 12:29:32.39 ID:3FdyDcSl.net
きこえるか
きこえるだろ

880 :デフォルトの名無しさん:2014/11/27(木) 12:31:34.44 ID:kRLD/q+H.net
歴史的に、俺達はマカーだ!Windowsを成敗してやる!みたいな人が増えて
初期段階でWindowsは対象外扱いになって以降Windowsお断りの流れが残ってる。
だから、Windows(デスクトップ)で使いたいのならJRubyにしてJava経由で外部に
アクセスすればいいんじゃないか?

881 :デフォルトの名無しさん:2014/11/27(木) 12:35:30.92 ID:4ox/+qp0.net
ねーよ。
著名コミッタでWindowsが日常使うインフラ、という人は普通にいるし。

882 :デフォルトの名無しさん:2014/11/27(木) 13:27:38.66 ID:Zw4dztb/.net
どこが最短一致っぽいのか理解できん
空白有り無しと最長最短は全く関係ないだろ

883 :デフォルトの名無しさん:2014/11/27(木) 19:59:53.06 ID:x9t4QVIg.net
「簡単なアニメーションを表示させること」を簡単だとは言ってないだろw

884 :デフォルトの名無しさん:2014/11/27(木) 20:00:52.83 ID:x9t4QVIg.net
881はミスです。ごめん

885 :デフォルトの名無しさん:2014/11/27(木) 20:04:51.12 ID:Gbz/cNhA.net
sauche labがjavascriptを主軸にした辺りでブームは終わってた

886 :デフォルトの名無しさん:2014/11/27(木) 23:46:42.90 ID:VtF/vuC1.net
>>873のリンク先読んでみたが、>>873の誤読じゃねーか。

887 :デフォルトの名無しさん:2014/11/28(金) 09:01:09.20 ID:9YzKv7io.net
rubyのリダイレクトってどうやんの?

require "cgi"
cgi=CGI.new
print cgi.header({
"status" => "REDIRECT",
"Location" => "http://yahoo.co.jp"})

これでstatus 302 Found Content-Type:text/html Location: http//yahoo.co.jp
とエラーになるのだけど

888 :デフォルトの名無しさん:2014/11/28(金) 14:04:23.45 ID:9YzKv7io.net
Rubyのメソッドの位置
呼出しの後に書く方法ないの?
JavaScriptのfunctionの位置が後ろでもいいのと同じように

889 :デフォルトの名無しさん:2014/11/28(金) 14:31:02.42 ID:9YzKv7io.net
レスがついてないかと何度も見にくるのが面倒
スレチェッカーみたいなのが必要だな

890 :デフォルトの名無しさん:2014/11/28(金) 16:33:52.22 ID:s06WWqGk.net
それを>>889が作るんだよ

891 :デフォルトの名無しさん:2014/11/28(金) 16:36:18.24 ID:9YzKv7io.net
>>890
そうだね作るよ
レンサバとtwitterの連携をして
2chスレとかブログとかの更新状況をチェックさせたいね

892 :デフォルトの名無しさん:2014/11/28(金) 17:22:02.27 ID:4Q/0sUIl.net
>>888
kwsk

893 :デフォルトの名無しさん:2014/11/28(金) 17:24:27.65 ID:9YzKv7io.net
>>892
def test
puts "a"
end
test

としたらエラーだよね

894 :デフォルトの名無しさん:2014/11/28(金) 17:29:57.85 ID:9YzKv7io.net
>>893
逆だった
test
def test
puts "a"
end

としたらエラー?

895 :デフォルトの名無しさん:2014/11/28(金) 17:32:19.81 ID:dYLaj0CI.net
前方参照だっけ
main を造れば解決

def main
test
end

def test
puts "a"
end

896 :デフォルトの名無しさん:2014/11/28(金) 17:38:43.47 ID:9YzKv7io.net
>>895
ありがとう!
やってみる

897 :デフォルトの名無しさん:2014/11/28(金) 23:02:39.06 ID:s06WWqGk.net
Rubyの参考書でピッケル本よりいいのある?
なるべく最新版のRubyの説明が欲しいんだけど

898 :デフォルトの名無しさん:2014/11/28(金) 23:06:23.12 ID:X9B4zpDK.net
今からRubyやるなんてやめとけ

899 :デフォルトの名無しさん:2014/11/28(金) 23:57:36.86 ID:rB015CFc.net
>>898
じゃあ、オススメは?
って聞くと返事ないんだなこれが。

900 :デフォルトの名無しさん:2014/11/29(土) 00:26:10.82 ID:oYYPhm21.net
Rubyは技術的負債

901 :デフォルトの名無しさん:2014/11/29(土) 00:51:08.50 ID:VwCgtTmZ.net
>>887
>{"status" => "REDIRECT",
>"Location" => "http〜"}

Hashの書き方は、以下のどちらか。:b はsymbol
{a: "あ", :b => "123"}

>>897
たのしいRuby、第4版、2013

902 :デフォルトの名無しさん:2014/11/29(土) 01:29:23.17 ID:oGP8NIsU.net
firefox+ruby+linux/windowsで

if $url.include?("google")
$html.gsub!("google", "goooooooogle")
end

みたいなフィルタスクリプト書いて
好き勝手にHTML書き換えるような方法ってないですか
greasemonkeyのruby版的な

903 :デフォルトの名無しさん:2014/11/29(土) 01:45:08.48 ID:7z0e2gGb.net
proxyでいいんじゃないの

904 :デフォルトの名無しさん:2014/11/29(土) 04:01:09.37 ID:1zUyeCTh.net
>>901
文字列をキーとするハッシュを期待しているところに
シンボルをキーとするハッシュを渡したらいけない
本を読み違えてないか

>>887
情報足りないけどとりあえずNPHでぐぐって

905 :デフォルトの名無しさん:2014/11/29(土) 05:28:59.78 ID:SoXvwZNw.net
本が間違ってるとか

906 :デフォルトの名無しさん:2014/11/29(土) 06:50:43.55 ID:1zUyeCTh.net
>>887
ごめんNPH云々なしで。書いてきた
http://codepad.org/3Z6gcanA

907 :デフォルトの名無しさん:2014/11/29(土) 11:29:23.68 ID:JNwBuwtk.net
Effective Ruby あなたのRubyをより輝かせる48の特別な方法
http://www.amazon.co.jp/dp/4798139823/

908 :デフォルトの名無しさん:2014/11/29(土) 17:40:54.50 ID:SoXvwZNw.net
>>907
表紙からして怪しいな

909 :デフォルトの名無しさん:2014/11/30(日) 03:55:44.88 ID:b4nmdqGs.net
>>904
あるある

910 :デフォルトの名無しさん:2014/11/30(日) 13:25:05.09 ID:LSdEo5lN.net
Rubyの古本を読んで興味をもったのですが
今、オススメの開発環境てどんな構成でしょうか

古書によるとIDEがRDE
ActiveScriptRubyとか書いてあり、
調べた結果
ソフトの更新が2007/08/02とか・・ちょっと不安なもので。

911 :デフォルトの名無しさん:2014/11/30(日) 14:15:47.70 ID:R4jt06qn.net
>>910
VMにLinux入れてその上で開発
使うのはエディタ
Sublime TextでもvimでもEmacsでも好きなのをどうぞ

912 :デフォルトの名無しさん:2014/11/30(日) 14:42:59.54 ID:DANrX/9U.net
Win上でバッチ処理とかやりたいならPythonかPerlだな
Ruby使うんならまずはWinを捨てるのが先だ

913 :デフォルトの名無しさん:2014/11/30(日) 14:54:07.38 ID:1W1RBCUH.net
>>910
今あなたの使っている開発環境でRuby2.x対応のプラグインかなんか探してください

914 :デフォルトの名無しさん:2014/11/30(日) 15:47:02.16 ID:z7OEJfrL.net
以前はemacsかvimが多かったけど職場ではめっきり減ったなぁ
仕事じゃないならemacsで十分だけど

915 :デフォルトの名無しさん:2014/12/01(月) 22:21:30.46 ID:x2gQFt7S.net
エディタやIDEの機能を頼らなくなるのはそれだけ
見通しが良くバグの少ないコードを書いている証でもある。

916 :デフォルトの名無しさん:2014/12/01(月) 23:55:20.61 ID:zTqy9NYJ.net
コードジェネレーターみたいなものは持っているよね?

917 :デフォルトの名無しさん:2014/12/02(火) 01:13:50.70 ID:e+ByT0s5.net
IDEはともかくVimやemacsなどの高機能エディタに頼るのは最悪
エディタを使いこなしてると自負する馬鹿は大抵コピペコードを量産するカス

918 :デフォルトの名無しさん:2014/12/02(火) 01:29:26.47 ID:h63pZmVM.net
>>917
知り合いに恵まれてないだけ。

919 :デフォルトの名無しさん:2014/12/02(火) 01:30:37.60 ID:2myFe3p+.net
バギーな俺様コードより実績の有るコピペコードの方が遥かにマシ。

920 :デフォルトの名無しさん:2014/12/02(火) 01:59:01.87 ID:0dk6vh22.net
emacsやvim使い続けてる優秀なプログラマはたくさんいるよ
低レイアになるほどIDEに依存する部分は少なくなるし
ただのアプリ開発やWEBエンジニアが必死こいてemacsカスタマイズしながら効率は悪いやつとか
マジで死ねって思うけどね

921 :デフォルトの名無しさん:2014/12/02(火) 08:13:53.30 ID:/FF2eUWr.net
rubygems.org落ちた?

922 :デフォルトの名無しさん:2014/12/02(火) 13:54:53.03 ID:2HEveihy.net
各行の出力をソースコード中の#=>の後に表示するのってどうやってやるんでしたっけ

923 :デフォルトの名無しさん:2014/12/02(火) 20:48:46.36 ID:baLmU3AB.net
vim+rubyですね

924 :デフォルトの名無しさん:2014/12/03(水) 09:19:57.96 ID:rVeqzZtK.net
begin
  メインの処理
ensure
 puts("err",$!,$@)
end

と同等の処理を

require 'catcherr'
メインの処理

に書き換えることってできないですかね
begin ensure endで囲わず
最外周のブロックから飛び出た例外を何処かでキャッチするような実装

925 :デフォルトの名無しさん:2014/12/03(水) 19:05:09.67 ID:RfWQR09u.net
RubyのFile.openは明示的にcloseしないと何が起こる? - QA@IT
http://qa.atmarkit.co.jp/q/58

また、1.8.7以降ではSymbol#to_procを利用して、
File.open(file, &:read)
と書くこともできます。
おそらくこれを見てイディオムとして
覚えたのではないかと思いました。

↑のページに書かれているイデオムってどこで覚えるんですか?
openメソッドで調べても&:readとか無いんですが。

926 :デフォルトの名無しさん:2014/12/03(水) 20:28:13.06 ID:AZ6paHjN.net
>>925
& はブロックを渡すときに使う
ブロックでないもの (:read) を渡そうとしたときには、#to_proc が呼ばれてその結果が渡される
File.open(file, &:read) は File.open(file) {|f| f.read } と等価

927 :デフォルトの名無しさん:2014/12/03(水) 21:32:25.36 ID:xz3L3IMu.net
>>925
File.openに限らず、メソッド呼び出し時の&という修飾子やSymbolに関する仕様なので
リファレンスマニュアルだとこのあたり参照
http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fcall.html#block
http://docs.ruby-lang.org/ja/2.1.0/class/Symbol.html#I_TO_PROC

928 :デフォルトの名無しさん:2014/12/03(水) 22:01:16.96 ID:UQcSH8bq.net
そこらへんの考え方は一貫性があって良いと思うが
実際に読み書きすると分かりにくく忘れやすい。
やろうとしていることは単なるレシーバーの省略に過ぎないのにブロックと
Symbolの挙動に関する仕様を覚えてないといけないせいだろう。

929 :デフォルトの名無しさん:2014/12/04(木) 08:45:48.17 ID:ce/wf1ga.net
>>922
StringIO を使えば?
StringIOは入出力を行う振りをする。
つまり、StringIOに対して、入出力できる

require "stringio"

io = StringIO.new
io.puts("abc")

930 :デフォルトの名無しさん:2014/12/04(木) 11:01:14.33 ID:isKydaHb.net
>>929
自力でやるのでなく、ライブラリか何かでできたような気がしていたのですが勘違いでしたかね

931 :デフォルトの名無しさん:2014/12/04(木) 11:27:49.19 ID:V4T1Mi+W.net
エディタやIDEの拡張スクリプトとRubyで実現すべきなんじゃないかそれ

932 :デフォルトの名無しさん:2014/12/04(木) 18:26:13.52 ID:vTyshef8.net
xmpfilter

933 :デフォルトの名無しさん:2014/12/04(木) 19:17:37.69 ID:isKydaHb.net
>>932
これだ!名前忘れてた ありがとうございます

934 :デフォルトの名無しさん:2014/12/06(土) 09:30:37.61 ID:SY1DjOc1.net
同じカラム定義のテーブルAとテーブルBがあるとして、テーブルAのデータを丸ごとテーブルBにコピーするバックアップ処理をしたいのですが、中々上手くいきません。
いい方法があれば教えていただけないでしょうか

935 :デフォルトの名無しさん:2014/12/06(土) 09:59:59.94 ID:O2PZNRYp.net
INSERT INTO B SELECT * FROM A

936 :デフォルトの名無しさん:2014/12/06(土) 13:53:19.49 ID:SY1DjOc1.net
>>935
ruby on railsの話ですので、スレ違いのようでした。申し訳ありません。

937 :デフォルトの名無しさん:2014/12/06(土) 15:48:55.31 ID:fsY1bGfg.net
>>936
バックアップならDBの機能を使うのが一番確実かつ高速

938 :デフォルトの名無しさん:2014/12/06(土) 22:50:21.90 ID:97ikO/+S.net
JavaとかでありがちなCompositeパターンを用いた様々な図形の面積の和を求める例題をやってみてるんだけど、上手く動かないのでアドバイスください
http://ideone.com/4zVsIk#

939 :デフォルトの名無しさん:2014/12/06(土) 22:56:02.59 ID:97ikO/+S.net
>>938
f = Figure.new
f.calcAreaSum

r = Region.new
r.calcAreaSum
の間違い

940 :デフォルトの名無しさん:2014/12/06(土) 22:58:28.94 ID:O2PZNRYp.net
>>938
http://ideone.com/Feolqo
compositeならRegionもFigureを継承しろ

941 :デフォルトの名無しさん:2014/12/06(土) 23:03:48.85 ID:97ikO/+S.net
>>940
ありがとう。助かりました。

942 :デフォルトの名無しさん:2014/12/06(土) 23:06:18.79 ID:97ikO/+S.net
>>940
すまん、ひとつ質問。
calcAreaSumメソッド内のsumが@sumになってなかったのが原因だったみたいで、そこを修正したら動いた。
RegionがFigureを継承していないといけないもの?
Regionが継承している必要はないかなと思ってたのだけれど。

943 :デフォルトの名無しさん:2014/12/07(日) 07:41:59.28 ID:O6jlUXZ3.net
>>942
必要ないかどうかはともかくそうしないとcompositeにならん
枝と葉を同一のインターフェースで扱うのがcompositeパターンだ
まあ実際compositeが必要なケースなんてまず無いけどね
設計者のオナニー

944 :デフォルトの名無しさん:2014/12/08(月) 00:17:30.45 ID:foBCsgK4.net
慣れてきたら
・calcAreaSum以外の任意のメソッドも同様の振舞をするように
・継承を使わず
・メソッド定義を繰り返さずに済む
ように作ってみよう。まぁオナニーつーか練習でな。

945 :デフォルトの名無しさん:2014/12/08(月) 00:50:44.64 ID:aCs4a6OV.net
>>943
なるほど、もっかいCompositeがどんなものか見てみる。

>>944
ん??全然分からん…

946 :デフォルトの名無しさん:2014/12/08(月) 23:04:19.93 ID:4fpsMANT.net
Rubyのしくみ -Ruby Under a Microscope-
http://www.amazon.co.jp/dp/4274050653/

本屋で見つけて買ってみた。
2章ぐらい読んだが、すごく面白いのでお勧め。

947 :デフォルトの名無しさん:2014/12/08(月) 23:16:33.06 ID:NGUYkyOW.net
おれもいま読んでる!

948 :デフォルトの名無しさん:2014/12/09(火) 17:17:06.41 ID:a/7FaIvm.net
どんな感じで面白いの?

作りながら・・の方を読んでるけど実用的で理解し易かった

949 :デフォルトの名無しさん:2014/12/09(火) 19:15:57.80 ID:6Ly9A1WV.net
ここは初心者スレッドだったか
言語フェチとか分解フェチみたいな人じゃないと厳しいかも

950 :デフォルトの名無しさん:2014/12/09(火) 19:19:14.74 ID:2/WMNdES.net
面白い世界があるよ、という事が伝わるなら、初心者の励みになるんじゃないか?

951 :デフォルトの名無しさん:2014/12/09(火) 19:21:43.66 ID:56meK9wT.net
Rubyは「実装が仕様」な言語だからあんまり深いところに入り込まないほうがいいよ
基本的にバッドノウハウだ

952 :デフォルトの名無しさん:2014/12/09(火) 22:02:10.16 ID:7jn1Y2FE.net
>>948
「作りながら・・」のほうは Ruby を使って何かアプリを作ろうとしている人にとって、
有益な良い書籍だね

一方、>>946 は(Amazon で目次レベルでの判断だけど、)
Ruby インタプリタそのものに興味がある人、
あるいは言語処理系(インタプリタやコンパイラ)の自作に興味がある人向けの本に見える

Ruby 1.8 向けには RHG(Ruby Hacking Guide) と呼ばれる本があって、
後者の人達には好評だった(とはいえ Ruby プログラマ全体からすれば一部だけど...)
・『Rubyソースコード完全解説』サポートページ
 http://i.loveruby.net/ja/rhg/
でも Ruby 1.9 で導入された仮想マシン(YARV)をベースにした RHG に相当する本は存在せず、
登場が長く待たれていた

>>946 があらゆる Ruby プログラマにとってすぐ役に立つ本だとは決して言えないけど、
いつも使っている Ruby の内部構造を知ることは将来的なステップアップにつながると思う
(車やバイクを趣味としている人が、エンジン等のメカニズムに興味を持つのと似ている)

953 :デフォルトの名無しさん:2014/12/09(火) 22:28:00.64 ID:zeFrRkpb.net
>>951
実装が仕様、とバッドノウハウがリンクする部分の論理がわからんのだが

954 :デフォルトの名無しさん:2014/12/09(火) 23:40:04.76 ID:u5JX9V0E.net
【IT】中高生Rubyプログラミングコンテスト開催 [14/12/08]?2ch.net
http://daily.2ch.net/test/read.cgi/newsplus/1418097669/

955 :デフォルトの名無しさん:2014/12/10(水) 00:31:41.98 ID:U+9OJfKH.net
YARVの作者の人も寄稿しているというのでそっちの詳しい話も読めるのかな、と
思ったら単に〜日でこんなの書けた俺スゲエ、って自慢話みたいな薄い内容でガッカリ
味付けは「みんなの参加も待ってるよ」といい感じに見せて実は単なる自慢だよなアレ

そういうのはどうでもいいからもっと技術的に実のあること書いて欲しかった。

956 :デフォルトの名無しさん:2014/12/10(水) 00:33:46.52 ID:QXcQ5EoT.net
>>955
そういう取り方しかできない人は何読んでも一緒だよ

957 :デフォルトの名無しさん:2014/12/10(水) 05:04:05.05 ID:+IoSb7+r.net
>>953
特定の実装のみに深く依存した知識やテクニックをバッドノウハウと呼ぶのはわりと普通だろ
プログラミングなんてバッドノウハウ覚えてなんぼの世界だが、程度問題だね

958 :デフォルトの名無しさん:2014/12/10(水) 05:17:46.52 ID:dRumJmjh.net
Ruby 初心者スレッド Part 55

959 :デフォルトの名無しさん:2014/12/10(水) 10:32:12.86 ID:4ySbe8P6.net
Rubyみたいな技術的負債生成言語
得意がって使っている頭の弱い人見ると
かわいそうになってくる

960 :デフォルトの名無しさん:2014/12/10(水) 14:39:23.04 ID:X/Vb7CZT.net
かわいそうに思ったらちゃんと優しくするんだぞ

961 :デフォルトの名無しさん:2014/12/10(水) 20:14:26.27 ID:qlA9G0h0.net
はあ
Ruby使ってて強い奴一杯いるから頭の弱いなんてことはないと思うが

962 :デフォルトの名無しさん:2014/12/11(木) 00:32:45.57 ID:KeFdm/Mm.net
vectorでn個要素を右にずらすみたな処理ってかけますか?
2個右にずらすなら、
v = Vector[0, 1, 2, 0, 0]
p v.slide(2) # => [0, 0, 0, 1, 2]
というイメージです。

今のところ、arrayで持っておいて、
v = [0, 1, 2, 0, 0]
original_length = v.length
p v.unshift(Array.new(2, 0)).flatten.take(original_length)
とやっています。

もっと綺麗な書き方があれば教えて下さい
Vectorには拘るわけではないので、どんな方法でも構いません

963 :デフォルトの名無しさん:2014/12/11(木) 00:43:54.20 ID:45mXFYqI.net
>>962
Array#rotate

964 :デフォルトの名無しさん:2014/12/11(木) 00:48:00.61 ID:45mXFYqI.net
あぁ、違うか

(Array.new(0, 2) + v).take(v.length) てことかな?

965 :デフォルトの名無しさん:2014/12/11(木) 00:52:21.31 ID:45mXFYqI.net
(Array.new(2, 0) + v).take(v.length) の間違い

他にも
Array.new(2, 0) + v[0...-2]
v.rotate(-2).fill(0, 0, 2)
とか書けるね

966 :デフォルトの名無しさん:2014/12/11(木) 23:39:59.15 ID:j2eKWXxC.net
>>963
rotate 知らなかった
調べたら他にも知らないのがあった reverse choice

967 :デフォルトの名無しさん:2014/12/12(金) 11:22:11.81 ID:wvqGZ6uF.net
ファイルの末尾の行を削除するのに以下のようにしているのですが
もっと綺麗な書き方ってありますでしょうか?

tmp = File.open("foo","r").read.sub(/\n.*\z/, "")
File.open("foo", "w"){|f| f << tmp}

968 :デフォルトの名無しさん:2014/12/12(金) 11:47:33.50 ID:r3Fvlg1D.net
メモリ馬鹿喰い

969 :デフォルトの名無しさん:2014/12/12(金) 12:02:57.32 ID:CU7D9V/b.net
Array.write(Array.read("foo")[0..-1])

970 :デフォルトの名無しさん:2014/12/12(金) 15:12:49.30 ID:JZfpq2Ndq
chomp

971 :デフォルトの名無しさん:2014/12/12(金) 19:34:47.77 ID:1pIHSp7p.net
>>969
何これ?
今使っているの1.9.3だけど最新バージョンだとこんなのできるの?

972 :デフォルトの名無しさん:2014/12/12(金) 21:12:49.28 ID:acGnDnrN.net
2.0.0でも2.1.5でもできないぞ

973 :デフォルトの名無しさん:2014/12/12(金) 21:13:06.40 ID:8AuYnR02.net
>>946
> Rubyのしくみ -Ruby Under a Microscope-
> http://www.amazon.co.jp/dp/4274050653/

Amazon売り切れなので、PDFで買ってみた。 500円安い。
http://estore.ohmsha.co.jp/titles/978427405065P

974 :デフォルトの名無しさん:2014/12/12(金) 23:48:26.96 ID:1pIHSp7p.net
>>967
こんなんはどうぢゃろ?

File.open("foo", "r+"){|f| f.truncate(f.size - f.readlines[-1].bytesize)}

>>972
Thanks
そうかやはり出来ないか・・

975 :デフォルトの名無しさん:2014/12/13(土) 00:25:27.81 ID:kA/WgxRu.net
>>973
読み終わったけど得るもの少ない
敢えて抽象的に説明しようとしてるんだろうけど無理矢理感が半端ない
実装はコラム枠で触れる程度
まぁ中卒高卒プログラマで溢れる現在にはこれぐらいがいいのかね

976 :デフォルトの名無しさん:2014/12/13(土) 00:28:40.88 ID:+p+L+BhL.net
>>973
素晴らしいサービスだけどもうちょっと書籍の種類増やして欲しいな

977 :デフォルトの名無しさん:2014/12/13(土) 00:36:48.47 ID:Iq5cIN4q.net
オーム社のPDF本何冊か買ってるけど、やっぱリフロー可能なepubの方がいいなあ
アスキーとかはそうなってる

978 :デフォルトの名無しさん:2014/12/13(土) 08:43:45.27 ID:3ehKG0WS.net
最近よく見かける質問だが、
配列Aに名前、Bに年令、Cに電話番号が入っている時、
B年令順にソートしたとき、
A,Cも同じように入れ替わるのは、どう作ればよい?
ただし、DBを使わず

クラスを作って、名前・年令・電話番号フィールドを作り、
年令でクラスごと、ソートするのか?

クラスに、Comparatorインターフェースを追加して、
比較関数 <=> を定義すればよいのか?


また、sortは比較する時に、同じ関数を何度も呼んで非効率だから、
sort_byを使えばよいのか?

sort_byなら、関数を呼んだ結果を保存して、
その結果を使って比較するから

979 :デフォルトの名無しさん:2014/12/13(土) 08:54:48.07 ID:1EyzOdES.net
>>978
Hashの配列で .sort_by{| hash | hash[:age] } するとか
サクッとデータ構造定義するにしてもclassでやらずにStruct使うとか

ちょっとしたことでクラス定義しちゃうのも、ある意味
クラスの扱いが手軽なRubyらしくていいかな、とも思うけどね

980 :デフォルトの名無しさん:2014/12/13(土) 09:08:10.50 ID:Iq5cIN4q.net
そう言う時はクラス作るだろ。
Cなら構造体で。

最初からなんでもコンテナが用意されているのに慣れていると、こういうバカみたいな
質問する奴でてくるのかな?

981 :デフォルトの名無しさん:2014/12/13(土) 09:09:57.14 ID:3ehKG0WS.net
集合演算を配列A=[1,2],B=[2,3]に使う際、
A + B → 1,2,2,3 重複あり
A | B → 1,2,3 重複なしとなるが、

順列ではなく組合せで、配列が同じかどうかを判別したい
[1,2,2][2,1,2][2,2,1] → 1,2,2
左のどの順列も、[1,2,2]と同じ

Rubyで、組合せマッチはどうすればよい?

982 :デフォルトの名無しさん:2014/12/13(土) 09:11:24.05 ID:KEKavmkB.net
質問重ねる前に礼ぐらい書きなさいよ

983 :デフォルトの名無しさん:2014/12/13(土) 09:11:32.36 ID:1Rys2+MB.net
>>981
Set

984 :975:2014/12/13(土) 09:19:06.92 ID:3ehKG0WS.net
>>979
Hashの配列とはどういう意味?
難しくてよくわからない

A名前は同姓同名もありで、このレコードはキーなしで、
幾つかのフィールドを持つ、単なる構造体と考えてください

985 :デフォルトの名無しさん:2014/12/13(土) 09:22:41.20 ID:uQ37H43s.net
sorted_index=(0..B.size).sort_by{|i|B[i]}

sorted_index.each{|i|
p [A[i],B[i],C[i]]
}

986 :デフォルトの名無しさん:2014/12/13(土) 09:23:28.89 ID:uQ37H43s.net
あ、ミス
×:sorted_index=(0..B.size).sort_by{|i|B[i]}
○:sorted_index=(0..B.size-1).sort_by{|i|B[i]}

987 :975:2014/12/13(土) 09:23:30.88 ID:3ehKG0WS.net
うんうん、皆様、回答ありがとう

988 :デフォルトの名無しさん:2014/12/13(土) 09:26:51.09 ID:1Rys2+MB.net
>>984
最近の言語では列ごとに縦の配列を作るなんてFortranや昔のCみたいな前時代的な発想はしない
確かにメモリの利用効率やアクセス効率の面でメリットはあるが、
Rubyの配列はもともとクソ非効率だから意味は無い
レコードごとにハッシュ作るような昔の人が見たら卒倒するようなことすら平気で行われる

989 :デフォルトの名無しさん:2014/12/13(土) 09:27:56.22 ID:uQ37H43s.net
>>981
処理負荷気にしなくていい程度なら全要素ソートしてから比較できればいい
A.map(&:sort) | B.map(&:sort) とか

990 :デフォルトの名無しさん:2014/12/13(土) 09:30:00.76 ID:DLY4IovQ.net
Ruby 初心者スレッド Part 56©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1418430552/

991 :975:2014/12/13(土) 09:36:37.22 ID:3ehKG0WS.net
>>985-986
配列A,B,C自体は、並べ替えずそのままで、
ソート結果のインデックスのみを使うんだね

もし配列A,B,C自体を並べ替えるのなら、
クラスやStructを使えばよいの?

>>983
Setですか、調べてみます

皆様、回答ありがとう

992 :デフォルトの名無しさん:2014/12/13(土) 09:52:04.58 ID:uQ37H43s.net
正しくは、というかちゃんとするならクラスやStructだろうね
その場で並び替えたいだけならいくらでもやりようはあるよ
A,B,C=[A,B,C].map{|a|sorted_index.map{|i|a[i]}}
とか

993 :デフォルトの名無しさん:2014/12/13(土) 09:54:01.10 ID:uQ37H43s.net
B,A,C=B.zip(A,C).sort.transpose
とか

994 :975:2014/12/13(土) 09:54:01.70 ID:3ehKG0WS.net
>>983
>>981
は同じ要素ありだから、集合を使えない

Set,SortedSetは集合だから、同じ要素は持てない

995 :デフォルトの名無しさん:2014/12/13(土) 09:57:09.43 ID:1Rys2+MB.net
>>994
だったらソートしてから比較しろ

996 :975:2014/12/13(土) 10:06:02.73 ID:3ehKG0WS.net
map,zipなど、魔法のような関数が、次々と出てきますね

Rでも行列を入れ替える関数などに、驚いたものですが、
もはや、Rubyは神です!
Rubyの奥深さを、少し知ることが出来ますた

997 :デフォルトの名無しさん:2014/12/13(土) 10:07:58.45 ID:1Rys2+MB.net
土方言語のVBやC#やJavaでもできるけどね

998 :デフォルトの名無しさん:2014/12/13(土) 10:14:06.14 ID:DLY4IovQ.net
関数とかインタフェースとか言ってる時点でお察し

999 :デフォルトの名無しさん:2015/01/10(土) 20:35:41.59 ID:DDEEiBhUK
netが落ちてる内に埋め

1000 :デフォルトの名無しさん:2015/01/10(土) 20:36:49.88 ID:DDEEiBhUK
あ、質問あるの忘れてた
例外処理について詳しく教えてくれますか

1001 :デフォルトの名無しさん:2015/01/10(土) 20:49:02.07 ID:DDEEiBhUK
jimは消えた方がいいんじゃないの

総レス数 1001
294 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★