トップページ > プログラム > 2014年11月03日 > aZ1lF/ar

書き込み順位&時間帯一覧

9 位/225 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000001102110000006



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
Ruby 初心者スレッド Part 55
【Python】スクリプト バトルロワイヤル46【pl,rb,php,js】

書き込みレス一覧

Ruby 初心者スレッド Part 55
747 :デフォルトの名無しさん[sage]:2014/11/03(月) 12:24:39.05 ID:aZ1lF/ar
>>743
実際に試してみればいい

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>'
【Python】スクリプト バトルロワイヤル46【pl,rb,php,js】
939 :デフォルトの名無しさん[sage]:2014/11/03(月) 13:32:40.28 ID:aZ1lF/ar
>>938
>個人の好き嫌い、みたいな行き過ぎた価値相対主義は
>単なる思考停止、反知性主義な愚か者の思考だと思う。

これのことか....
>青木純の本とか読むと、Smalltakerの宗教じみたキモさ

たしかに、思考停止と反知性主義な愚か者の思考だね
Ruby 初心者スレッド Part 55
750 :デフォルトの名無しさん[sage]:2014/11/03(月) 15:24:11.59 ID:aZ1lF/ar
>>748
単純に timeout(1) へ与えたブロック内で Fiber.yield しているので
コンテクストが親に切り替わっているからだろ

自分でコンテクストを切り替えておいて、
それでもなお元のコンテクストでタイムアウト例外を補足できると期待するという
>>748 の思考回路がわからん
Ruby はエスパーではないから >>748 の意図を読み取って振る舞ってはくれないし、
コンテクストを切り替えろというコードの指示に従って忠実に動いているだけ

自分が何を意図してコードを書いているのか、よく考えたほうがいいと思う
Ruby 初心者スレッド Part 55
752 :デフォルトの名無しさん[sage]:2014/11/03(月) 15:41:58.79 ID:aZ1lF/ar
>>749
0、1、とくれば次に期待するのは 2、3、と増加する振る舞いだと思うけど、
なぜか -1 になっている
すまんが、-1 になれる上手い方法は思いつけない

ちなみに 0、1、ときて最後に N へ到るという多次元配列であれば、

(0..N).inject(array) { |ary, n| ary[index[n]] }

でアクセスできると思う
Ruby 初心者スレッド Part 55
758 :デフォルトの名無しさん[sage]:2014/11/03(月) 16:21:40.77 ID:aZ1lF/ar
>>757
>という事でtimeoutのexception_classを指定してみた所、下のrescueで補足するようになりました。

exception_classを指定しなくとも、>>748 のコードのままでも下の rescue で例外は補足されている
下の resucue というコードを rescue => ex; p ex へと書き換えれば、
#<Timeout::Error: execution expired> という出力を確認できるはず


>バグではないのかと気になりますが、どうなんでしょうね。

Fiber.yield でコンテクストを親に切り替えた後にタイムアウト例外が発生し、
その例外は切り替わった親の(=下の) resucue で補足されている

>>750 で書いたことを繰り返すけど、Ruby は>>748 のコードに従って忠実に動いているはずだ
それなのに、なぜこれをバグを感じるのか意味不明だね
Ruby 初心者スレッド Part 55
763 :デフォルトの名無しさん[sage]:2014/11/03(月) 17:12:32.08 ID:aZ1lF/ar
>>760
同じコードであっても、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>


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。