Ruby 初心者スレッド Part 55
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2014/06/21(土) 23:39:44.94ID:rKd1VvW8質問するときは、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/
0611デフォルトの名無しさん
2014/10/07(火) 19:51:50.70ID:TyujhZt1Railsスレとマルチすんな
0612デフォルトの名無しさん
2014/10/07(火) 20:03:27.32ID:Lth77BfJヌケヌケと答えてしまうところだった
0613デフォルトの名無しさん
2014/10/07(火) 22:12:43.85ID:KzNWKz7K0614デフォルトの名無しさん
2014/10/07(火) 22:21:38.40ID:lactWcAJ0615デフォルトの名無しさん
2014/10/07(火) 22:38:55.76ID:BlA3KCzr0616デフォルトの名無しさん
2014/10/08(水) 12:51:11.03ID:RGealQpg0617デフォルトの名無しさん
2014/10/08(水) 14:05:31.36ID:WR+D1wBUヒント: 正規表現
0618デフォルトの名無しさん
2014/10/08(水) 17:18:55.98ID:qx5li64aclass Point
attr_accessor :x, :y
end
class Area < Point
end
と
class Area < Struct.new(:x, :y)
end
この2つの違いを教えてください
0619デフォルトの名無しさん
2014/10/08(水) 17:34:36.72ID:vDUa8S4h0620デフォルトの名無しさん
2014/10/08(水) 19:06:34.65ID:5mBaIux9あれ、気のせい?
0621デフォルトの名無しさん
2014/10/08(水) 22:02:54.67ID:0CbvvJChinitialize を定義しなくても new で各メンバの初期化が出来る
attr_accessor の方は Enumerable を取り込まないため
Enumerable 由来のメソッドが大量に定義されないで済む
個人的には Struct が好みだけど、一般的には attr_accessor の方が利用されている
0622デフォルトの名無しさん
2014/10/10(金) 22:57:37.90ID:hLe2xq4/本当に初歩の初歩だと思うんですが、、お答え願えませんか?
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 したものを何かにぶち込むと配列になるのでしょうか?
そういうものだ、って解釈でよいのでしょうか。
0623デフォルトの名無しさん
2014/10/10(金) 23:05:19.35ID:j7rjXjTeお前が寝ぼけてるだけ
もう一度落ち着いてそれ実行してみろ
0624デフォルトの名無しさん
2014/10/10(金) 23:21:19.86ID:hLe2xq4/うわ。ほんとだ。寝ぼけてただけでした。
ほんとすいません。
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すると、配列オブジェクトになるってのはあってますか?
0625デフォルトの名無しさん
2014/10/10(金) 23:29:13.14ID:Mhk11MXA0626デフォルトの名無しさん
2014/10/11(土) 00:17:24.24ID:t1ONSAIz=> 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 ファ!?
0627デフォルトの名無しさん
2014/10/11(土) 00:19:51.34ID:bs/sFubV0628デフォルトの名無しさん
2014/10/11(土) 12:01:18.49ID:WAdfmHXI0629デフォルトの名無しさん
2014/10/11(土) 13:04:18.34ID:GOKZHlwErubocopもバシバシ警告してくるのですがイマイチ理由が分かりません。
0630デフォルトの名無しさん
2014/10/11(土) 13:44:55.56ID:2iP0q5Ek0631デフォルトの名無しさん
2014/10/11(土) 13:48:39.52ID:7ki1LAY5http://stackoverflow.com/questions/5587264/do-end-vs-curly-braces-for-blocks-in-ruby
0632デフォルトの名無しさん
2014/10/11(土) 14:58:29.97ID:9vsymaaRs = "My name is Monar"
s = s.split(" ")を使うと、
文字列が空白で分割されて、配列の0〜3に格納される
[My,name,is,Monar]
>>629-631
ブロックが1行なら、{ }の方が見やすい
複数行なら、do〜endを使う
0633デフォルトの名無しさん
2014/10/11(土) 15:14:29.24ID:7ki1LAY5アンカつけるならリンク先読んでちょ
あと My じゃなくて "My" ね
0634629
2014/10/11(土) 18:35:23.61ID:GOKZHlwEやっぱ優先順位から見ると{}の方が自然に思えますよね。
「複数行だとdo end」も見た目のこだわり以上の理由はないと理解しました。
0635烏有(uyuu) ◆/uuWdTQ106
2014/10/11(土) 18:40:20.18ID:fozbFsv6家族もバシバシ警告してくるのですがイマイチ理由が分かりません。
0636デフォルトの名無しさん
2014/10/12(日) 02:07:30.17ID:2D7VEq3z0637デフォルトの名無しさん
2014/10/12(日) 02:23:45.11ID:LsklK5Csopen obj.filename do |file|
# open()に渡されるブロック
end
open obj.filename {|file|
# obj.filename()に渡されるブロック
}
これだけ見ると do 〜 end の結合度のが自然に見えない?
どっちか片方だけが自然、って訳ではないと思う
0638烏有(uyuu) ◆/uuWdTQ106
2014/10/12(日) 04:40:30.30ID:iENiuObxやっぱ優先順位から見ると{ドア}ドンの方が自然に思えますよね。
「複数回だと壁 ドン」もドンの音のこだわり以上の理由はないと理解しました。
0639デフォルトの名無しさん
2014/10/12(日) 14:23:41.50ID:MraGD/gc引数が二つ以上あるのにカンマがないのはおかしいので↑は自然とは思わないなあ
↓のfilenameがselectとかmapとかのときを考えると↓の結合度が自然だと感じる
まあどっちにしろそんなわかりにくい結合させずに括弧で明示するけどね
0640デフォルトの名無しさん
2014/10/12(日) 16:06:02.65ID:Yv9TiAGs冗長なうえ結合度が違うのは害悪ですらある
637は要らぬ混乱を招くとても悪いスタイルだから真似しちゃダメ
0641デフォルトの名無しさん
2014/10/12(日) 21:26:34.17ID:Tx1BX1Kd戻り値を扱うかどうかで書き分けてるな〜
0642デフォルトの名無しさん
2014/10/12(日) 22:15:56.50ID:ElJnU/0K俺もそうだな
戻り値を使うなら {}、使わないなら do..end だな
0643デフォルトの名無しさん
2014/10/13(月) 05:27:00.26ID:j90eBv3o0644デフォルトの名無しさん
2014/10/13(月) 13:11:18.96ID:xzr2gdng何か歴史的な経緯があるのかい?
0645デフォルトの名無しさん
2014/10/13(月) 13:15:20.64ID:j90eBv3o後でそれを追加できないという破綻した命名規約だけどね
0646デフォルトの名無しさん
2014/10/13(月) 13:27:29.45ID:yFRqmPNp0647デフォルトの名無しさん
2014/10/13(月) 14:06:45.14ID:qSnkJX9/正確な経緯は知らんけど、Lisper な Matz には副作用や参照透明性みたいな
概念を重要視していなかった(=深く考えていなかった)だけだと思う
>>645
命名規則が破綻したケースの例としては、ハッシュを更新する破壊的メソッド Hash#update に
後から非破壊メソッドを追加できずしかたなく Hash#merge! と Hash#metge を追加した、
というのがあるね
0648デフォルトの名無しさん
2014/10/14(火) 07:50:28.20ID:FY2dMxGyまあ今も昔も深く考えてないというのは間違いないと思うが
今だって標識くらいの見かけ的な役割だもんね ! と ?
0649デフォルトの名無しさん
2014/10/15(水) 21:56:04.60ID:0iTmmfe+何か問題があれば!を検索して集中的に調べる。
Immutableなコレクションしか持たない言語よりも柔軟で実用的だと思うんだ。
これはrubyの好きな点の一つなので、!のルール付けは徹底してほしいところだ。
0650デフォルトの名無しさん
2014/10/15(水) 23:39:21.06ID:KzNnpQwi0651デフォルトの名無しさん
2014/10/16(木) 07:30:36.81ID:GRIRO8vO逆が出来ないから困るって話をしてるんだが
0652デフォルトの名無しさん
2014/10/16(木) 10:25:27.96ID:qnIoh31O0653デフォルトの名無しさん
2014/10/16(木) 10:31:38.08ID:6hon/NKm逆ができないってどういうこと?
aliasを付けることはどっちもできるし
ソース上で不統一だとどっちの場合も同じように困ると思うんだけど
何に困ってるの
0654デフォルトの名無しさん
2014/10/16(木) 15:55:07.15ID:CsOFEKWu副作用で思い出したのだがpushやpopに!が付かないのは
何か歴史的な経緯があるのかい?
645 デフォルトの名無しさん [sage] 2014/10/13(月) 13:15:20.64 ID:j90eBv3o Be:
対応する非破壊版がないから
後でそれを追加できないという破綻した命名規約だけどね
0655デフォルトの名無しさん
2014/10/16(木) 15:56:08.66ID:CsOFEKWu後から非破壊メソッドを追加できずしかたなく Hash#merge! と Hash#metge を追加した、
というのがあるね
648 デフォルトの名無しさん [sage] 2014/10/14(火) 07:50:28.20 ID:FY2dMxGy Be:
pushやpopはどう考えても機能名称的にpushやpopという単語だろうという縛りがないでもない
まあ今も昔も深く考えてないというのは間違いないと思うが
今だって標識くらいの見かけ的な役割だもんね ! と ?
0656デフォルトの名無しさん
2014/10/16(木) 17:18:05.50ID:MV7SzJpM0657デフォルトの名無しさん
2014/10/17(金) 02:16:25.49ID:EUFGtU/Qうまくいきません。ネットでやると失敗します。
で、「Rubyによるクローラ開発」って本に、そういうときはコンパイル済みバイナリをローカルに
置くのがいい、とあったので、rubygem.orgからx86-mingw32というのを取って来て実行してみた
のですが、
Unable to resolve dependencies: nokogiri requires mini_portile
ってエラーが出て進まなくなってしまいます。
環境が悪いんでしょうか? みなさんとこ上手くインストールできてます?
0658デフォルトの名無しさん
2014/10/17(金) 04:56:18.47ID:lMkb3UyL0659デフォルトの名無しさん
2014/10/17(金) 07:48:33.50ID:tubR575L0660デフォルトの名無しさん
2014/10/17(金) 07:49:03.51ID:XvOfVc4rトニー・ジャーか…?
マッハ!のタイトルっぽいな
0661デフォルトの名無しさん
2014/10/17(金) 08:10:47.98ID:QP1DIUi6環境が悪いとすれば君の生まれ育った環境が悪いんだろう
0662デフォルトの名無しさん
2014/10/17(金) 08:21:15.00ID:4+0nBHRNhttp://developers.slashdot.jp/story/14/10/10/2155216/
環境が悪いせいかやっぱ滅び行く言語みたいだな
0663デフォルトの名無しさん
2014/10/17(金) 11:49:30.34ID:Q41qEvOL0664デフォルトの名無しさん
2014/10/17(金) 11:53:45.91ID:HZvg3la90665デフォルトの名無しさん
2014/10/17(金) 15:50:56.69ID:TIsdM5eDAndroid上でコードを書き換えて動作させたりしたいと思っているので、Rubotoはちょっと方向性が違うと思っています。
よろしくお願いします。
0666デフォルトの名無しさん
2014/10/17(金) 19:32:37.25ID:HZvg3la90667デフォルトの名無しさん
2014/10/17(金) 21:07:26.92ID:j5u0ESS9>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(現状はベータ版)でクロス開発するというプロセスになると思われる
0668デフォルトの名無しさん
2014/10/17(金) 23:42:47.60ID:4+0nBHRNすぐ潰れそう
0669デフォルトの名無しさん
2014/10/18(土) 08:36:09.60ID:cvL+Wsv6ありがとう、試してみます。
>> 667
PCでRubyをコンパイルしてAndroidで動かす仕組みだと勘違いしていました。
ご指摘いただきありがとうございます。
0670デフォルトの名無しさん
2014/10/19(日) 20:19:35.03ID:vOhlo+XI何か良い方法はないでしょうか?
何もオプションを付けないと64bitバイナリが生成されるようですが・・・
2.0.0p481[x64-mingw32]
0671デフォルトの名無しさん
2014/10/20(月) 01:41:16.45ID:6j05cluu大丈夫なのかな? 個人環境で起きるなら良いんだけど、会社だとセキュリティ担当に
自動で通報されちゃうので説明したりとちょっと大事になるので面倒くさい。
0672デフォルトの名無しさん
2014/10/20(月) 06:54:15.02ID:v2I1VvBQ0673デフォルトの名無しさん
2014/10/20(月) 19:46:50.69ID:kEWHmjOP0674デフォルトの名無しさん
2014/10/24(金) 23:57:31.15ID:pwlehayb1.0.integer?
だとfalseが返ってきてしまいます
0675デフォルトの名無しさん
2014/10/25(土) 00:09:39.99ID:L2ksR7r0a.floor == a # => true
a = 1.1
a.floor == a # => false
こういうこと?
0676デフォルトの名無しさん
2014/10/25(土) 08:32:50.27ID:j6rbe9Rw複素数にも対応してあげるのが親切ってもんだろう。
そこはfloorでもceilでもなくto_iだな。
0677デフォルトの名無しさん
2014/10/25(土) 08:34:28.50ID:8yzcXx0W誤差考えるとなあ
irb(main):006:0> a=Math.sqrt(27)/Math.sqrt(3)
=> 3.0000000000000004
irb(main):007:0> a.floor==a
=> false
0678デフォルトの名無しさん
2014/10/25(土) 08:37:31.51ID:Osfk0YxR0679デフォルトの名無しさん
2014/10/25(土) 09:19:46.12ID:NijgTWsoもしくは
require'mathn'
とかかなあ
0680デフォルトの名無しさん
2014/10/25(土) 12:30:31.13ID:9i0hi/co√27 ÷ √3
= 3√3 ÷ √3
= 3
を a に代入
以下略
0681デフォルトの名無しさん
2014/10/25(土) 12:36:41.68ID:cqm+9BdH=> 3.0000000000000004
わろた
0682デフォルトの名無しさん
2014/10/25(土) 13:23:01.23ID:Osfk0YxRそれが3になってないからfalseで正しいじゃん
0683デフォルトの名無しさん
2014/10/25(土) 13:39:00.78ID:NijgTWso累乗根とかの無理数をその場で計算せずそのままあつかうようなクラスを個別に定義していけば
そのうち全部誤差なしにできるかもね(もちろん最終的に有理数になる場合)
>>682
人間が計算すれば3になるからtrueを得たいってことでしょ
0684デフォルトの名無しさん
2014/10/25(土) 14:21:19.99ID:L2ksR7r0無理数が入るものを有限桁しか持てない計算機で計算させるんだから、
その誤差を考えて計算させないと意味が無い
これはRubyに限った話じゃなく、計算機に計算をさせる上で必ず考慮しなければ
ならないポイント
0685デフォルトの名無しさん
2014/10/25(土) 14:47:58.38ID:B/NlI7do$ 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
そういうものだよ
カッコでくくるといいかもね
0686デフォルトの名無しさん
2014/10/25(土) 15:03:54.32ID:L2ksR7r0(a.round - a).abs < EPS
みたいにやるのがよくある方法だね
(ただしaがそれほど大きくないという条件はつくけど)
0687デフォルトの名無しさん
2014/10/25(土) 16:10:16.86ID:OBw5xvhC0688デフォルトの名無しさん
2014/10/25(土) 16:55:42.43ID:5nT/ZQiNComplex#to_iは虚数部が0じゃない時はRangeError吐くから
もう少し工夫しないといけない気がする
0689デフォルトの名無しさん
2014/10/25(土) 17:42:04.77ID:Osfk0YxR>>674は計算の仕方を聞いてるわけじゃないだろ
0690デフォルトの名無しさん
2014/10/25(土) 19:46:48.42ID:L2ksR7r0有限桁の計算機で計算する以上、無理数が混じった計算で整数かどうかを正確に
判定することなんてできないよ
0691デフォルトの名無しさん
2014/10/25(土) 19:50:06.84ID:/9oTGPcj0692デフォルトの名無しさん
2014/10/25(土) 19:51:20.02ID:TvGWFX6/そういうアカデミックな世界はPythonの方が環境整ってるからおすすめ
0693デフォルトの名無しさん
2014/10/25(土) 20:55:31.74ID:OBw5xvhC0694デフォルトの名無しさん
2014/10/25(土) 21:43:14.43ID:AJUIP7QMまるで点のように飛び飛びに存在しており、
数学の実数のようには、数が連続していない
また数が大きくなるほど、2点間の距離も大きくなっていき、
最後には2点間の距離は、1よりも大きくなり、1を足せなくなる
また2点間にある値は、どちらかに丸められて表現される
>>686
絶対誤差と相対誤差という概念もある
1,000で1の誤差と、1.0で0.001の誤差は、
1/1,000という同じ誤差
0695デフォルトの名無しさん
2014/10/26(日) 20:04:28.62ID:z1XaoFmtどうやってデバッグしたらいいの?
0696デフォルトの名無しさん
2014/10/26(日) 21:06:23.46ID:e33XAUxVweb server のログを見てみよう
0697デフォルトの名無しさん
2014/10/26(日) 21:24:15.67ID:z1XaoFmtredmine/log/production.logはアクセスしても更新されてないです。
なぜだ。
0698デフォルトの名無しさん
2014/10/26(日) 21:25:42.86ID:e33XAUxVweb server のエラーログだよ
0699デフォルトの名無しさん
2014/10/26(日) 21:57:12.33ID:z1XaoFmtdrwx--x--x 6 root root
で一般ユーザーには見れません。
ほかのところで見れるのかな
0700デフォルトの名無しさん
2014/10/26(日) 21:57:13.28ID:BCpeePebcoreserverってレンタルサーバか。CGIしか動かないんじゃないの。rackとかいじれば動くかもしれないけど、planioとか設置済みの借りたほうがいいんじゃないの。
0701デフォルトの名無しさん
2014/10/26(日) 22:08:53.22ID:z1XaoFmtsshでログインして色々できるので
~/usr/以下に
ruby-2.1.3
subversion-1.8.10
fcgi-2.4.1
make-4.0
libtool-2.4.2
など、依存関係、バージョンアップが必要なやつらを入れてやって
ようやくエラーなくbuild installできたり
require 'fcgi'でのーさっちふぁいる言われなくなったところです。
0702デフォルトの名無しさん
2014/10/26(日) 22:09:41.87ID:z1XaoFmtbundle installやった。
0703デフォルトの名無しさん
2014/10/27(月) 01:56:33.97ID:AAN1U1FS0704デフォルトの名無しさん
2014/11/01(土) 10:53:07.72ID:KbCSRqlI実際の値とは異なるものになってしまうのですが、何故なのでしょうか?
ruby-2.1.3 とruby-2.1.4 で動作を確認しました。
OSはvistaです。
0705デフォルトの名無しさん
2014/11/01(土) 11:00:20.69ID:3nVvYlYVcodepadとかに
0706デフォルトの名無しさん
2014/11/01(土) 11:48:23.78ID:KbCSRqlI具体的には、高速で階乗を求めるソースを考えている時に起こりました。
http://codepad.org/uMrdmWoQ
上のソース(numの階乗を出力)で、5688以上の階乗を求めようとすると誤った値が出力されます。
原因を調べたところ、いつくかの乗算の結果がおかしなことになっていました。
その例です↓
http://codepad.org/Evm4WIzw
なお、codepad上では正しく動いています。
0707デフォルトの名無しさん
2014/11/01(土) 11:59:15.57ID:KbCSRqlI1.8.7
1.9.3
2.0.0
では正常に動くことを確認しました。
0708デフォルトの名無しさん
2014/11/01(土) 12:42:09.57ID:JDs1edib2.1 のバグだね、きっと
↓にしたがってバグ報告しましょう
https://bugs.ruby-lang.org/projects/ruby/wiki/HowToReportJa
0709デフォルトの名無しさん
2014/11/01(土) 13:08:03.38ID:E0YeAKNcやはり科学技術計算ならPythonか。
0710デフォルトの名無しさん
2014/11/01(土) 13:12:37.62ID:JDs1edibそう思ってるならRubyスレなんか覗かなきゃいいのに
単純に叩くネタを探しにきてるだけなのかい?
■ このスレッドは過去ログ倉庫に格納されています