プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
Ruby on RailsについてはWEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 60
https://mevius.2ch.net/test/read.cgi/tech/1493398918/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
探検
Ruby 初心者スレッド Part 61 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/08/25(金) 15:59:11.22ID:HsL9LVKJ
784デフォルトの名無しさん
2017/11/08(水) 11:01:17.22ID:/a2FPcjq そもそも何が間違いかなんて見方はナンセンス
筋が悪いとは思う
筋が悪いとは思う
785デフォルトの名無しさん
2017/11/08(水) 13:25:58.44ID:KVemNC3B >>783
Rubyに限らないが、一般論でいうなら、低い抽象度で物事を考えすぎてる
例えば文字列中のカーソルの位置を進めるなら、
それは pos[0] += 1 ではなく cursor.next_char() だろ
Rubyに限らないが、一般論でいうなら、低い抽象度で物事を考えすぎてる
例えば文字列中のカーソルの位置を進めるなら、
それは pos[0] += 1 ではなく cursor.next_char() だろ
786デフォルトの名無しさん
2017/11/08(水) 20:27:09.27ID:yXBCWp2w Rubyでポインタが必要だと思ったことがまずない
Cを難解にしてるのがポインタだし
Cを難解にしてるのがポインタだし
787デフォルトの名無しさん
2017/11/08(水) 23:27:04.92ID:CJyDItek 関数やprocやlambdaでSystemStackErrorを起こすとRuby自体が落ちちゃうんだけどこれって仕様?
https://ideone.com/GmkU9W
IDEONEでは何も問題ないんだけど
うちの環境(UbuntuとWindows8.1)ではnested_method1の2回目の途中でRubyが落ちる
1.8.7ではなぜか問題なく動くがそれ以外のバージョンは全て全滅
https://ideone.com/GmkU9W
IDEONEでは何も問題ないんだけど
うちの環境(UbuntuとWindows8.1)ではnested_method1の2回目の途中でRubyが落ちる
1.8.7ではなぜか問題なく動くがそれ以外のバージョンは全て全滅
788デフォルトの名無しさん
2017/11/08(水) 23:28:13.06ID:CJyDItek ああ1行目は関数じゃなくてメソッドね
789デフォルトの名無しさん
2017/11/09(木) 08:01:53.37ID:LcbWCl7/ メモリーがハード故障起こしてると落ちたりするし、マルウェアからの保護機能で落とされてる可能性も有る
落ちる現象がハードウェア要因なのかソフトウェア要因なのかいまいち判断付かないから、
CPUからM/B、OSのバージョンとかRubyのインスコ環境や実行環境をもっと書いて
なんだったらVMWareでシンプルな環境を構築してそこでコードを試して、落ちるかどうか確認する方法もある
落ちる現象がハードウェア要因なのかソフトウェア要因なのかいまいち判断付かないから、
CPUからM/B、OSのバージョンとかRubyのインスコ環境や実行環境をもっと書いて
なんだったらVMWareでシンプルな環境を構築してそこでコードを試して、落ちるかどうか確認する方法もある
790デフォルトの名無しさん
2017/11/09(木) 08:11:17.58ID:O2u0zvzZ >>787
ruby のBug だと思う。
手元の環境だと、2.4.2 2.3.5 2.5.0-preview1 rbx-3.84 でsegfault 、jruby-9.1.13.0 はsegfault は回避してるのを確認した。
1.9 以降で出てきたのは、ruby の実行エンジンが YARV 化されたタイミングでの問題だと思う。
ただ、スタック食いつぶす動作を安全に回避するのは面倒な上に、過度な再帰はプログラムの問題なので優先度は低い扱いになる気がする。
ruby のBug だと思う。
手元の環境だと、2.4.2 2.3.5 2.5.0-preview1 rbx-3.84 でsegfault 、jruby-9.1.13.0 はsegfault は回避してるのを確認した。
1.9 以降で出てきたのは、ruby の実行エンジンが YARV 化されたタイミングでの問題だと思う。
ただ、スタック食いつぶす動作を安全に回避するのは面倒な上に、過度な再帰はプログラムの問題なので優先度は低い扱いになる気がする。
791デフォルトの名無しさん
2017/11/09(木) 09:11:32.41ID:Zo52Bx6X 既知のバグなの?
792デフォルトの名無しさん
2017/11/09(木) 10:02:35.59ID:UInw5/Yz begin - rescue を外に書けってことかな
793デフォルトの名無しさん
2017/11/09(木) 10:47:34.59ID:LcbWCl7/ ttps://bugs.ruby-lang.org/projects/ruby/wiki/HowtoReportJa
バグレポートのやりかたのページ貼っておく
バグレポートのやりかたのページ貼っておく
794デフォルトの名無しさん
2017/11/09(木) 11:09:27.98ID:Zo52Bx6X >>792
ruby落ちて
ruby落ちて
795デフォルトの名無しさん
2017/11/09(木) 11:10:33.69ID:Zo52Bx6X るんだが
796デフォルトの名無しさん
2017/11/09(木) 11:21:25.84ID:UInw5/Yz 外に書いたら落ちないんじゃね
797デフォルトの名無しさん
2017/11/09(木) 12:44:30.09ID:lsXbZUw6 >>789-790
ありがとう
SEGVだったんだね
確認してみたところ同様の問題はいくつも報告されてたわ
https://bugs.ruby-lang.org/issues/13412
https://bugs.ruby-lang.org/issues/13596
ちなみに
RUBY_THREAD_VM_STACK_SIZEを10000とか小さい値にすると
>>787は想定通り動く
ありがとう
SEGVだったんだね
確認してみたところ同様の問題はいくつも報告されてたわ
https://bugs.ruby-lang.org/issues/13412
https://bugs.ruby-lang.org/issues/13596
ちなみに
RUBY_THREAD_VM_STACK_SIZEを10000とか小さい値にすると
>>787は想定通り動く
798デフォルトの名無しさん
2017/11/09(木) 15:30:22.12ID:LcbWCl7/ #terget = Proc.new do |x|
#p "nest_in"
#x.call(x)
#p "nest_out"
#end
#terget.call(terget)
proc使ってstack level too deep (SystemStackError)が出るコードって言ったらこんな感じか?
#p "nest_in"
#x.call(x)
#p "nest_out"
#end
#terget.call(terget)
proc使ってstack level too deep (SystemStackError)が出るコードって言ったらこんな感じか?
799デフォルトの名無しさん
2017/11/09(木) 17:52:29.86ID:hsGRI/CZ ポインタが難解なのではない、C/C++のポインタの実装が難解なのだ
800デフォルトの名無しさん
2017/11/09(木) 17:58:10.14ID:Kt7ooYYm >>798
(f=->{f[]})[]
(f=->{f[]})[]
801デフォルトの名無しさん
2017/11/09(木) 19:19:57.54ID:UInw5/Yz >>799
+1
+1
802デフォルトの名無しさん
2017/11/09(木) 19:47:42.78ID:LcbWCl7/ 平易といわれようが読みやすいんだから仕方がない
def func_recall()
func_recall()
end
proc{func_recall()}.call
def func_recall()
func_recall()
end
proc{func_recall()}.call
803デフォルトの名無しさん
2017/11/09(木) 19:58:50.93ID:EJhAj4oK 昨日と同じように今日も池沼のフリして荒らしてきたか
804デフォルトの名無しさん
2017/11/09(木) 20:10:42.01ID:Zo52Bx6X 荒らし本人は自演がばれてないと本気で思っていそう
今のうちに例のテンプレ貼っとく
>荒らしを構ってる奴は荒らし本人の自演だから、構ったりせず見つけ次第、自演を指摘して排除すること
>荒らし叩きに見せて持論を言い出す奴も荒らし本人だから、これも自演を指摘して排除すること
>他の言語について話そうとする奴は、その言語スレから排除されてRubyスレに流れ着いた荒らしだから、これも構ったりせず元の言語スレへ誘導すること
今のうちに例のテンプレ貼っとく
>荒らしを構ってる奴は荒らし本人の自演だから、構ったりせず見つけ次第、自演を指摘して排除すること
>荒らし叩きに見せて持論を言い出す奴も荒らし本人だから、これも自演を指摘して排除すること
>他の言語について話そうとする奴は、その言語スレから排除されてRubyスレに流れ着いた荒らしだから、これも構ったりせず元の言語スレへ誘導すること
805デフォルトの名無しさん
2017/11/10(金) 21:19:41.48ID:zSzvlQjG new以外のインスタンス生成方法を持ってるクラスって、
派生させても元のクラスのインスタンスを生成するんだね
全てのメソッド書き換えるのがすごく面倒なんだけど何か良い方法ない?
派生させても元のクラスのインスタンスを生成するんだね
全てのメソッド書き換えるのがすごく面倒なんだけど何か良い方法ない?
806デフォルトの名無しさん
2017/11/10(金) 22:05:04.82ID:tus45AjF self.class.new
807デフォルトの名無しさん
2017/11/10(金) 22:51:06.22ID:zSzvlQjG class MyArray < Array
end
p (MyArray[1,2,3] + MyArray[1,2,3]).class
#=>Array
上のコードを見てもらえば分るけど、
Arrayを継承したMyArrayのインスタンス同士の演算を行うと、MyArrayでなくArrayのインスタンスが出力される
全てのメソッドの出力をMyArrayのインスタンスになるようにしたいんだけど、
メソッドを全部書き換える以外に良い方法って何かない?
end
p (MyArray[1,2,3] + MyArray[1,2,3]).class
#=>Array
上のコードを見てもらえば分るけど、
Arrayを継承したMyArrayのインスタンス同士の演算を行うと、MyArrayでなくArrayのインスタンスが出力される
全てのメソッドの出力をMyArrayのインスタンスになるようにしたいんだけど、
メソッドを全部書き換える以外に良い方法って何かない?
808デフォルトの名無しさん
2017/11/10(金) 23:47:08.43ID:fJV6zsPP >>807
ソースコードを見てみるとArrayの派生クラスであってもArrayとして作成されるようになってる
https://github.com/ruby/ruby/blob/trunk/array.c#L3643
度々似たようなやり取りが起こるけど、この件についてはRubyの仕様として、
改善される兆しが見えない (開発者の変更する必要性が薄そう)
正攻法となるとメーリングリストのruby-devに必要性を訴えて改善するくらいになるんじゃないかなあ
ソースコードを見てみるとArrayの派生クラスであってもArrayとして作成されるようになってる
https://github.com/ruby/ruby/blob/trunk/array.c#L3643
度々似たようなやり取りが起こるけど、この件についてはRubyの仕様として、
改善される兆しが見えない (開発者の変更する必要性が薄そう)
正攻法となるとメーリングリストのruby-devに必要性を訴えて改善するくらいになるんじゃないかなあ
809デフォルトの名無しさん
2017/11/11(土) 00:16:49.19ID:JLG7hn9J >>807
ビルトインクラスは継承すんな、てのがあるらしい
ビルトインクラスは継承すんな、てのがあるらしい
810デフォルトの名無しさん
2017/11/11(土) 01:33:08.56ID:XLuIumW0 確かに、出力するオブジェクトのクラスをメソッドの書き換えしないで派生先や派生元に切り替えられたら便利だよな
811デフォルトの名無しさん
2017/11/11(土) 04:45:48.84ID:TdyG/ulQ しかしそもそもArrayとか継承したいクラスだよな
オープンクラスで直接Array自体の挙動を変えてしまうと
何か問題が起こったときに怖い
オープンクラスで直接Array自体の挙動を変えてしまうと
何か問題が起こったときに怖い
812デフォルトの名無しさん
2017/11/11(土) 09:50:02.65ID:5mgMmggv 方法を聞いているんだから感想を言っててどうするよ
一つの方法としてMarshal.dumpとMarshal.load使うってのはどうか?
メソッドで派生元クラスのインスタンスがでてきたら、
そのインスタンスをMarshal.dumpしてクラス部分だけ書き換えてMarshal.loadしてクラスを変えるわけ
一つの方法としてMarshal.dumpとMarshal.load使うってのはどうか?
メソッドで派生元クラスのインスタンスがでてきたら、
そのインスタンスをMarshal.dumpしてクラス部分だけ書き換えてMarshal.loadしてクラスを変えるわけ
813デフォルトの名無しさん
2017/11/11(土) 11:50:45.38ID:AwGKm55U どの言語でも、Array, String などの基本クラスは継承できないし、継承してはならない
prototype.js というライブラリは、基本クラスの動作を上書きして、変更したため、
モンキーパッチと言って、非常に嫌われた
ただし、Rails のような権威が、基本クラスにメソッドを追加するのは、認められている。
これらは、開発保守が継続して行われるため
つまり、個人レベルではダメ
prototype.js というライブラリは、基本クラスの動作を上書きして、変更したため、
モンキーパッチと言って、非常に嫌われた
ただし、Rails のような権威が、基本クラスにメソッドを追加するのは、認められている。
これらは、開発保守が継続して行われるため
つまり、個人レベルではダメ
814デフォルトの名無しさん
2017/11/11(土) 11:54:48.07ID:7DvP3YTX どうでもいいよ
どうせRubyなんか書捨てスクリプトにしか使わないし
どうせRubyなんか書捨てスクリプトにしか使わないし
815デフォルトの名無しさん
2017/11/11(土) 12:07:00.75ID:TdyG/ulQ 配列が使いたいときは代替eachが使いたいから
EnumerableかEnumeratorを継承するとか?
EnumerableかEnumeratorを継承するとか?
816デフォルトの名無しさん
2017/11/11(土) 12:08:40.11ID:v8o/qZh1 + が返すクラスをどうすべきかってだけで、他のメソッドはできるだけ継承したクラスを返すようになってるよ
817デフォルトの名無しさん
2017/11/11(土) 12:34:01.09ID:AwGKm55U 基本クラスは、継承するな!
継承よりも、委譲
継承よりも、委譲
818デフォルトの名無しさん
2017/11/11(土) 14:10:03.21ID:BdEcqbw0 処理系に依ってEnumerable#mapとArray#mapが別実装だったり同じだったりして気持ち悪いから
Array継承するくらいならEnumerableを継承するわ
Array継承するくらいならEnumerableを継承するわ
819デフォルトの名無しさん
2017/11/11(土) 14:21:19.83ID:JLG7hn9J820デフォルトの名無しさん
2017/11/11(土) 15:07:21.47ID:5mgMmggv また荒らしが進行妨害してるのか
方法聞いてるレスだっつってんだろ
毎度毎度、スレの質問無視して自演で持論を語って荒らすのやめろ
ここは初心者用の質問スレだ
方法聞いてるレスだっつってんだろ
毎度毎度、スレの質問無視して自演で持論を語って荒らすのやめろ
ここは初心者用の質問スレだ
821デフォルトの名無しさん
2017/11/11(土) 16:38:25.00ID:XLuIumW0 確かに、聞いてたのは方法だったな
明らかに見当違いなレス返してた荒らしもいたし
ごめん
質問への回答だけどメソッド書き換えせずにという事だから、
const_get、const_setを使ってその場だけクラスを入れ替えるというのは?
今、適当に思いついたので検証してないけど
明らかに見当違いなレス返してた荒らしもいたし
ごめん
質問への回答だけどメソッド書き換えせずにという事だから、
const_get、const_setを使ってその場だけクラスを入れ替えるというのは?
今、適当に思いついたので検証してないけど
822デフォルトの名無しさん
2017/11/11(土) 21:37:18.75ID:05iXsNcy このスレって雑談OKなのに何言ってるんだか
823デフォルトの名無しさん
2017/11/11(土) 22:58:55.05ID:+LVMEIXu では雑談をしましょう
型Aを渡したときは型AAで、型Bを渡したときは型BBで
こういったことが簡単にしたければ、静的型の機能を使うのが一番手軽で自然
なぜなら構文レベルでサポートされてるから
(C++で言うところのテンプレートとか)
なのでRubyに静的型を導入するのが手っ取り早い
結果的にはうまくいかなかったんですが、TypeAnnotationをつけて
頑張ろうっていうのを余暇でやっているらしく
Ruby 3で導入しようとしている型システムは型推論だけでどうにかしようという
アプローチとは別のアプローチ
2010年代のプログラミング言語は型ありなのが当たり前になってきているので
Rubyはだいぶ置いてけぼり感(笑)があります
ですので、コミュニティ内での危機感も高いと思います
型Aを渡したときは型AAで、型Bを渡したときは型BBで
こういったことが簡単にしたければ、静的型の機能を使うのが一番手軽で自然
なぜなら構文レベルでサポートされてるから
(C++で言うところのテンプレートとか)
なのでRubyに静的型を導入するのが手っ取り早い
結果的にはうまくいかなかったんですが、TypeAnnotationをつけて
頑張ろうっていうのを余暇でやっているらしく
Ruby 3で導入しようとしている型システムは型推論だけでどうにかしようという
アプローチとは別のアプローチ
2010年代のプログラミング言語は型ありなのが当たり前になってきているので
Rubyはだいぶ置いてけぼり感(笑)があります
ですので、コミュニティ内での危機感も高いと思います
824デフォルトの名無しさん
2017/11/11(土) 23:03:47.07ID:JLG7hn9J それは雑談ではなくて荒らし
825デフォルトの名無しさん
2017/11/12(日) 00:27:53.41ID:WkrbFi3G 雑談にみせかけた荒らしをずっとやってる奴が何か文句言ってるけど、
初心者の質問スレで質問無視してスレ妨害し続けてたらみんなぶち切れるわな
もう半年以上になるんやで?
初心者の質問スレで質問無視してスレ妨害し続けてたらみんなぶち切れるわな
もう半年以上になるんやで?
826デフォルトの名無しさん
2017/11/12(日) 00:40:27.97ID:Ob05ibl6 質問なんてめったにないでしょ
827デフォルトの名無しさん
2017/11/12(日) 01:01:09.44ID:WkrbFi3G そうやって質問のレスを無視して荒らすから、
みんなぶち切れてるんやで?
いい加減にしとけよ
みんなぶち切れてるんやで?
いい加減にしとけよ
828デフォルトの名無しさん
2017/11/12(日) 01:03:23.41ID:Ob05ibl6 俺は荒らしてないよ。そうやって絡んでくる君のほうが荒らしじゃないの
829デフォルトの名無しさん
2017/11/12(日) 01:08:30.49ID:K4QprXz0 ID:Ob05ibl6
ほぼ毎日、スレに質問ついてるのに何処見てるの?
もしかしておまえが例の荒らし?
テンプレ貼っておくね
>荒らしを構ってる奴は荒らし本人の自演だから、構ったりせず見つけ次第、自演を指摘して排除すること
>荒らし叩きに見せて持論を言い出す奴も荒らし本人だから、これも自演を指摘して排除すること
>他の言語について話そうとする奴は、その言語スレから排除されてRubyスレに流れ着いた荒らしだから、これも構ったりせず元の言語スレへ誘導すること
ほぼ毎日、スレに質問ついてるのに何処見てるの?
もしかしておまえが例の荒らし?
テンプレ貼っておくね
>荒らしを構ってる奴は荒らし本人の自演だから、構ったりせず見つけ次第、自演を指摘して排除すること
>荒らし叩きに見せて持論を言い出す奴も荒らし本人だから、これも自演を指摘して排除すること
>他の言語について話そうとする奴は、その言語スレから排除されてRubyスレに流れ着いた荒らしだから、これも構ったりせず元の言語スレへ誘導すること
830デフォルトの名無しさん
2017/11/12(日) 01:14:32.30ID:Ob05ibl6 だから俺じゃないってw
俺普通に質問に答えてやったりしてるし
俺普通に質問に答えてやったりしてるし
831デフォルトの名無しさん
2017/11/12(日) 01:16:43.11ID:WkrbFi3G >質問なんてめったにないでしょ
ってどのスレの話?
ってどのスレの話?
832デフォルトの名無しさん
2017/11/12(日) 01:19:01.73ID:Ob05ibl6833デフォルトの名無しさん
2017/11/12(日) 01:28:26.85ID:pqrFAwxv834デフォルトの名無しさん
2017/11/12(日) 12:29:55.19ID:qqn9BEpx 質問者がいるんだから雑談やめろとかアホだろ
質問に対する回答以外全部荒らしってどういう事だよ
それに回答者がアンカつければいいだけじゃん
謝辞どころか〆宣言すらない質問者がどれだけいることやら
質問に対する回答以外全部荒らしってどういう事だよ
それに回答者がアンカつければいいだけじゃん
謝辞どころか〆宣言すらない質問者がどれだけいることやら
835デフォルトの名無しさん
2017/11/12(日) 12:35:34.52ID:WkrbFi3G ずっとこのスレを荒らしてる奴がいるんだが
頭大丈夫?
頭大丈夫?
836デフォルトの名無しさん
2017/11/12(日) 13:50:01.60ID:9KdAqRKN 静的型のほうがさ宇ぐれてる云々言う粘着してる奴は確かにいるけど
それ以外のささいな会話も荒らし認定ってどういうことよ
それ以外のささいな会話も荒らし認定ってどういうことよ
837デフォルトの名無しさん
2017/11/12(日) 15:17:44.54ID:SkwCxk0Z 雑談に似せた荒らしを行うから荒らし認定されるんじゃない?
荒らし行為やスレの妨害じゃないなら誰も文句なんて言わないよ
そもそも、この期に及んで質問なんてめったに無いとかレスつけたり、
何ヶ月も荒らされてる事を無かった事にする奴って荒らし本人じゃないのか?
荒らし行為やスレの妨害じゃないなら誰も文句なんて言わないよ
そもそも、この期に及んで質問なんてめったに無いとかレスつけたり、
何ヶ月も荒らされてる事を無かった事にする奴って荒らし本人じゃないのか?
838デフォルトの名無しさん
2017/11/12(日) 15:34:09.85ID:GrP4UM5B839デフォルトの名無しさん
2017/11/13(月) 11:16:26.32ID:9i4StzNN rubyのメソッドチェーンがよくわからない
あとフックかけられるポイントも
メソッド呼び終わった直後にフック掛ける方法ってある?
あとフックかけられるポイントも
メソッド呼び終わった直後にフック掛ける方法ってある?
840デフォルトの名無しさん
2017/11/13(月) 20:26:44.92ID:NOdl0XYl >>839
トレースポイントというものがある
https://docs.ruby-lang.org/ja/latest/class/TracePoint.html
TracePoint.trace(:return, :c_return) do |tp|
p tp.return_value
end
"A".downcase.upcase.upcase!
# => "a" => "A" => nil
トレースポイントというものがある
https://docs.ruby-lang.org/ja/latest/class/TracePoint.html
TracePoint.trace(:return, :c_return) do |tp|
p tp.return_value
end
"A".downcase.upcase.upcase!
# => "a" => "A" => nil
841デフォルトの名無しさん
2017/11/13(月) 23:44:35.19ID:9i4StzNN おおー、これは便利だ
ありがとう
ありがとう
842デフォルトの名無しさん
2017/11/13(月) 23:58:39.44ID:NOdl0XYl 追記
全てのあらゆるメソッドに介入するため、
if tp.path == __FILE__ したり、
if tp.method_id == :method_name したりして範囲を絞ると見やすくなる
他には自家製クラス・モジュールであればprepend使って面白おかしくすることも可能
全てのあらゆるメソッドに介入するため、
if tp.path == __FILE__ したり、
if tp.method_id == :method_name したりして範囲を絞ると見やすくなる
他には自家製クラス・モジュールであればprepend使って面白おかしくすることも可能
843デフォルトの名無しさん
2017/11/14(火) 19:27:47.47ID:hugtgo3r コードゴルフで1000までの素数を標準出力に出力ってのをやってるけど
60文字が限界だ。誰か画期的なの教えてくれ。
60文字が限界だ。誰か画期的なの教えてくれ。
844デフォルトの名無しさん
2017/11/14(火) 20:35:46.66ID:43++cTdw 過去スレには結構そういうのが載ってると思うけど参考にしてみたら?
今現在はあんまり流行っていない、
というかコードをスレに書かないと誰も乗ってこないと思う
あと、変わったお題ならプチ盛り上ると思う
今現在はあんまり流行っていない、
というかコードをスレに書かないと誰も乗ってこないと思う
あと、変わったお題ならプチ盛り上ると思う
845デフォルトの名無しさん
2017/11/14(火) 20:39:19.62ID:yEmE0LhS 50B
a=[*2..1e3]
p a.each{|e|a.reject!{|v|v!=e&&v%e<1}}
a=[*2..1e3]
p a.each{|e|a.reject!{|v|v!=e&&v%e<1}}
846デフォルトの名無しさん
2017/11/14(火) 20:45:40.97ID:yEmE0LhS 47B 切りがないのでこれで終わりにする
p (a=*2..1e3).each{|e|a.reject!{|v|v>e&&v%e<1}}
p (a=*2..1e3).each{|e|a.reject!{|v|v>e&&v%e<1}}
847デフォルトの名無しさん
2017/11/14(火) 20:54:13.19ID:yEmE0LhS 45B これでほんとにラスト
p (a=*2..1e3).each{|e|a-=(2..31).map{|v|v*e}}
p (a=*2..1e3).each{|e|a-=(2..31).map{|v|v*e}}
848デフォルトの名無しさん
2017/11/14(火) 20:54:58.38ID:hugtgo3r おお流石さらっと回答が。ありがとうございます。俺のぼろ臭いエラトステネスもどきとは一味違いますね。
849デフォルトの名無しさん
2017/11/14(火) 21:04:49.82ID:yEmE0LhS ついでだがPrimeクラスを使ってもいいなら33B
#!ruby -rprime
p *Prime.each(1e3)
#!ruby -rprime
p *Prime.each(1e3)
850デフォルトの名無しさん
2017/11/15(水) 21:17:20.80ID:V8OOXL+L 「Rubyのpublic/private/protectedはaccess controlとしては壊れている」と言われたが、その答えは「確かに。access controlとして作ってないからな」というものであった。
851デフォルトの名無しさん
2017/11/15(水) 21:18:26.53ID:V8OOXL+L publicとprivateも壊れてるんですか?
852デフォルトの名無しさん
2017/11/15(水) 21:18:44.62ID:V8OOXL+L 「privateはsendとかでアクセスできるし、サブクラスからも見える」だそうです。確かにそうだ。publicは壊れていないと思いますけど、他2つが(access control として)壊れていたら、そもそも指定できる必要はないとは言えそう。
853デフォルトの名無しさん
2017/11/15(水) 21:55:17.62ID:PrGhGlG4 なんだこの自演
854デフォルトの名無しさん
2017/11/15(水) 22:31:56.17ID:V8OOXL+L 御大のtwitterの会話を貼り付けただけ
855デフォルトの名無しさん
2017/11/15(水) 22:32:21.95ID:V8OOXL+L すぐ自演とか頭悪ポw
856デフォルトの名無しさん
2017/11/16(木) 00:12:57.76ID:EjNhewu+ 自演と言うよりは
引用の仕方を知らないんだろうね
引用の仕方を知らないんだろうね
857デフォルトの名無しさん
2017/11/16(木) 06:47:18.22ID:0Chmg9DF この反応はやはり荒らしか
858デフォルトの名無しさん
2017/11/16(木) 14:52:27.31ID:L3BAWltd 自演失敗とな?
よし、晒し上げるか
よし、晒し上げるか
859デフォルトの名無しさん
2017/11/17(金) 21:40:30.22ID:+zjghEIw sliceで負数を指定したときの挙動の解釈が合ってるか教えてくれ
例えばnに12345って文字列があったとして
p n.slice(0,1)
p n.slice(-1,0)
ってやると1と5が出力される
つまり、絶対値が正数の負数が文字列の後ろから順々に対応してるって解釈で合ってる?
例えばnに12345って文字列があったとして
p n.slice(0,1)
p n.slice(-1,0)
ってやると1と5が出力される
つまり、絶対値が正数の負数が文字列の後ろから順々に対応してるって解釈で合ってる?
860デフォルトの名無しさん
2017/11/17(金) 21:56:30.56ID:IylgmQJ2 >>859
あってる
StringだけじゃなくてArrayでも同じ
ちなみに二つの整数値を与えるのではなく範囲で終わりを示す方法もよく使われる
p "12345".slice(1..-1) # => "2345" # 二つのピリオド
p "12345".slice(1...-1) # => "234" # 三つのピリオド
p "12345".slice(1..-2) # => "234"
p "12345".slice(1, -1) # => nil # 二つの引数
sliceだけじゃなくて[]でも同様に使う事ができる
あってる
StringだけじゃなくてArrayでも同じ
ちなみに二つの整数値を与えるのではなく範囲で終わりを示す方法もよく使われる
p "12345".slice(1..-1) # => "2345" # 二つのピリオド
p "12345".slice(1...-1) # => "234" # 三つのピリオド
p "12345".slice(1..-2) # => "234"
p "12345".slice(1, -1) # => nil # 二つの引数
sliceだけじゃなくて[]でも同様に使う事ができる
861デフォルトの名無しさん
2017/11/17(金) 21:57:12.32ID:5DUWZGJy (-6..6).each{|i|p n[i]}と試せばすぐにわかることをなぜ人に聞くのか
862デフォルトの名無しさん
2017/11/17(金) 21:58:54.04ID:5DUWZGJy というかp n.slice(-1,0)は""じゃないのか
863デフォルトの名無しさん
2017/11/17(金) 22:22:53.66ID:+zjghEIw864デフォルトの名無しさん
2017/11/17(金) 22:48:06.98ID:5DUWZGJy866デフォルトの名無しさん
2017/11/17(金) 23:17:48.28ID:g+LRYPuD イミュータブルの話していい?
記憶違いかもしれないけど、なんか将来のRubyでStringがイミュータブルになるって話だかを小耳にしたんだけど、どういうこと?
今のStringって書き換える操作に見えても実は別の生成したStringへ参照を換えているだけだで、
イミュータブルだと思ってたんだけど違うの?
記憶違いかもしれないけど、なんか将来のRubyでStringがイミュータブルになるって話だかを小耳にしたんだけど、どういうこと?
今のStringって書き換える操作に見えても実は別の生成したStringへ参照を換えているだけだで、
イミュータブルだと思ってたんだけど違うの?
867デフォルトの名無しさん
2017/11/17(金) 23:27:32.19ID:2lBbqhr3868デフォルトの名無しさん
2017/11/17(金) 23:33:09.94ID:urhgHz9b >>867
ソースプリーズ
ソースプリーズ
869デフォルトの名無しさん
2017/11/17(金) 23:44:19.35ID:fWRDFZO8 現実的に考えて、今のRuby界にPython3ショック並の非互換を乗り越える体力はない
そもそも3がリリースされる日が本当に来るのかは怪しいけど、もし出てもRails系には完全スルーじゃないかな
静的型もメタプログラミング全開のRailsに役立つようなものにはならないだろうし
そもそも3がリリースされる日が本当に来るのかは怪しいけど、もし出てもRails系には完全スルーじゃないかな
静的型もメタプログラミング全開のRailsに役立つようなものにはならないだろうし
870デフォルトの名無しさん
2017/11/17(金) 23:56:41.31ID:IylgmQJ2 >>866
今はリテラル文字列のオブジェクトが別だけど
ruby3になったらおなじオブジェクトになるって事
今のrubyでもコマンドラインオプションやソースコードのマジックコメントで挙動を確認できる
$ ruby24 -e '5.times{ p "abcdefg".object_id }' 17208605440
17208605280
17208605200
17208605120
17208605020
$ ruby24 --enable frozen-string-literal -e '5.times{ p "abcdefg".object_id }'
17208605640
17208605640
17208605640
17208605640
17208605640
rubyの実装レベルの話だと内部で共有文字列オブジェクトがcopy on writeされるようになってるだけ
ruby3になると共有文字列オブジェクトが直接表に出てくるってことになるんだろうね
今はリテラル文字列のオブジェクトが別だけど
ruby3になったらおなじオブジェクトになるって事
今のrubyでもコマンドラインオプションやソースコードのマジックコメントで挙動を確認できる
$ ruby24 -e '5.times{ p "abcdefg".object_id }' 17208605440
17208605280
17208605200
17208605120
17208605020
$ ruby24 --enable frozen-string-literal -e '5.times{ p "abcdefg".object_id }'
17208605640
17208605640
17208605640
17208605640
17208605640
rubyの実装レベルの話だと内部で共有文字列オブジェクトがcopy on writeされるようになってるだけ
ruby3になると共有文字列オブジェクトが直接表に出てくるってことになるんだろうね
871デフォルトの名無しさん
2017/11/18(土) 00:42:51.61ID:llwTwelI 一番の違いは文字がイミュータブルになるってことだろ
だからcopy on writeする必要もない
writeできないんだからcopyも不要
だからcopy on writeする必要もない
writeできないんだからcopyも不要
872デフォルトの名無しさん
2017/11/18(土) 00:49:48.52ID:sDELvJVN873デフォルトの名無しさん
2017/11/18(土) 00:50:21.77ID:18l+ABsp874デフォルトの名無しさん
2017/11/18(土) 00:55:46.00ID:pAjRC1cg ruby3にショックを起こしそうな変更が大してなさそうな所がショックなのではないだろうか
文字列といえば、SHARABLE_MIDDLE_SUBSTRINGはruby3で標準になるのか誰か知らんか
文字列といえば、SHARABLE_MIDDLE_SUBSTRINGはruby3で標準になるのか誰か知らんか
875デフォルトの名無しさん
2017/11/18(土) 01:01:26.66ID:sDELvJVN876デフォルトの名無しさん
2017/11/18(土) 02:23:57.54ID:v7CgBLN2 >C extension
詳細プリーズ
詳細プリーズ
877デフォルトの名無しさん
2017/11/18(土) 03:03:45.56ID:pAjRC1cg 文字列のデータがヌル終端文字列とは限らないので、char*取る時はStringValueCStr()使うとか
878デフォルトの名無しさん
2017/11/18(土) 04:44:28.98ID:LQXdQwI7 たのしいruby読みとおしたけどあんまたのしくない
879デフォルトの名無しさん
2017/11/18(土) 06:34:47.32ID:O/cG1rmo プログラミングが楽しいんであって
本で勉強するのが楽しいわけじゃないからな
本で勉強するのが楽しいわけじゃないからな
880デフォルトの名無しさん
2017/11/18(土) 16:31:16.15ID:6foiYhRZ 関数型言語 Elixir からの影響
文字列が、immutable なら、安全で効率的
文字列が、immutable なら、安全で効率的
881デフォルトの名無しさん
2017/11/18(土) 21:45:21.11ID:W95R0KgI >>866
Rubyで文字列をfreezeしまくるのが流行ってて
なんでかって、最適化のため
> http://d.hatena.ne.jp/ku-ma-me/20151004/p1
> 2 行目は 1 行目の 2 倍くらい速いです。
だもんで、freeze付けまくるっていう手動の最適化が蔓延していて
(二倍も速くなるならせざるを得ない)
なにかCとかアセンブラでシコシコ最適化していた90年代の香りがする
これもRubyが意味もなく遅すぎるのが原因で
主要言語と比べて30〜50倍ぐらい遅いので、3.0GHzの最新CPUで走らせても
実質60〜100MHzの激遅化石CPUで走らせていることになるので
まぁ90年代といわれれば、ちょうどそのあたりかもしれない
> https://qiita.com/sue738/items/6c312672cecd9e0400a2
あの頃はちょっとの速度差がクリティカルで、何か懐かしいね
Rubyはコンピュータに出来ることはコンピュータにやらせる主義なので
プログラマに手動の最適化を強いるし、型チェックもプログラマにやらせる
何か矛盾したことを言っているように思えるが
言語開発者の視点に立って、全力で手抜きして言語処理系を作ることを考えると
別に間違ったことは言ってない
幽遊白書風に言うと、仙水の言う「俺達七人」に君らは入ってないってことだな
Rubyで文字列をfreezeしまくるのが流行ってて
なんでかって、最適化のため
> http://d.hatena.ne.jp/ku-ma-me/20151004/p1
> 2 行目は 1 行目の 2 倍くらい速いです。
だもんで、freeze付けまくるっていう手動の最適化が蔓延していて
(二倍も速くなるならせざるを得ない)
なにかCとかアセンブラでシコシコ最適化していた90年代の香りがする
これもRubyが意味もなく遅すぎるのが原因で
主要言語と比べて30〜50倍ぐらい遅いので、3.0GHzの最新CPUで走らせても
実質60〜100MHzの激遅化石CPUで走らせていることになるので
まぁ90年代といわれれば、ちょうどそのあたりかもしれない
> https://qiita.com/sue738/items/6c312672cecd9e0400a2
あの頃はちょっとの速度差がクリティカルで、何か懐かしいね
Rubyはコンピュータに出来ることはコンピュータにやらせる主義なので
プログラマに手動の最適化を強いるし、型チェックもプログラマにやらせる
何か矛盾したことを言っているように思えるが
言語開発者の視点に立って、全力で手抜きして言語処理系を作ることを考えると
別に間違ったことは言ってない
幽遊白書風に言うと、仙水の言う「俺達七人」に君らは入ってないってことだな
882デフォルトの名無しさん
2017/11/18(土) 21:46:45.02ID:18l+ABsp また粘着君か
883デフォルトの名無しさん
2017/11/18(土) 22:36:14.71ID:fA1Yzd5Y 早くしたいなら言語変えろよ
JavaでもC#でもGoでもさ
JavaでもC#でもGoでもさ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国側が首相答弁の撤回要求、日本側拒否★4 [夜のけいちゃん★]
- 中国の局長は「両手をポケット」で対峙 宣伝戦で国民に示す ★4 [蚤の市★]
- 中国側が首相答弁の撤回要求、日本側拒否★5 [夜のけいちゃん★]
- 「厚かましい挑発的発言だ」中国国連大使が高市首相発言に強く反発 日本の常任理事国入りに明確に反対 [ぐれ★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★6 [ぐれ★]
- 解体ごみ約2.3トンを山に不法投棄か トルコ国籍解体工を逮捕 埼玉 [どどん★]
- 【ネトウヨの理想国家】政府が国民の旅行先を統制する国 [419054184]
- 【悲報】高市早苗さん、たった一人で日本を崩壊へ導く [714769305]
- でも高市早苗がセックス外交したら逆転ホームランあるよな [695089791]
- 【悲報】「やったー!こだわりまくった洋館仕立ての家を建てたぞ!」➡「「離婚したんで住まずに売ります……」 [158478931]
- 精神する時の🏡
- 【画像】日本のリン肥料、7割が中国だった!レアじゃないアースを禁輸されただけて餓死へ [347751896]
