[#32185] Date#+に大きな数字を与えるとおかしな日付に — "madoka yamamoto" <yamamotomadoka@...>

こんにちは、山本と申します。

26 messages 2007/11/08
[#32186] Re: Date#+に大きな数字を与えるとおかしな日付に — Tadayoshi Funaba <tadf@...> 2007/11/08

> Dateオブジェクトに+で大きな数字を与えるとおかしくなるようです。

[#32188] Re: Date#+に大きな数字を与えるとおかしな日付に — "madoka yamamoto" <yamamotomadoka@...> 2007/11/09

山本です。

[#32191] Re: Date#+に大きな数字を与えるとおかしな日付に — tadf@... 2007/11/09

> アルゴリズムの意味がわからないで書いた、表層的なパッチなので

[#32194] Re: Date#+に大きな数字を与えるとおかしな日付に — Yukihiro Matsumoto <matz@...> 2007/11/09

Hi,

[#32200] Re: rational (Re: Date#+に大きな数字を与えるとおかしな日付に) — Tadayoshi Funaba <tadf@...> 2007/11/10

> 1.9ではRationalとComplexを組み込みに、という話はありましたが、

[#32225] Re: rational (Re: Date#+に大きな数字を与えるとおかしな日付に) — Shin-ichiro HARA <sinara@...> 2007/11/12

原です。

[#32198] [提案] Array#tail — "Yusuke ENDOH" <mame@...>

遠藤と申します。

21 messages 2007/11/09
[#32199] Re: [提案] Array#tail — Yukihiro Matsumoto <matz@...> 2007/11/10

まつもと ゆきひろです

[#32352] 1.9.1のリリース時期について — KIMURA Koichi <hogemuta@...>

木村です。

16 messages 2007/11/24
[#32353] Re: 1.9.1のリリース時期について — Yukihiro Matsumoto <matz@...> 2007/11/24

まつもと ゆきひろです

[#32403] Next 1.8.6 patch release? (was Re: 1.9.1のリリース時期について) — Takahiro Kambe <taca@...>

こんばんは。

32 messages 2007/11/29
[#32414] Re: Next 1.8.6 patch release? (was Re: 1.9.1のリリース時期について) — Urabe Shyouhei <shyouhei@...> 2007/11/30

卜部です。

[#32444] Re: Next 1.8.6 patch release? (was Re: 1.9.1のリリース時期について) — Yukihiro Matsumoto <matz@...> 2007/12/03

まつもと ゆきひろです

[#32488] Re: Next 1.8.6 patch release? (was Re: 1.9.1のリリース時期について) — Urabe Shyouhei <shyouhei@...> 2007/12/08

卜部です。

[#32525] Re: Next 1.8.6 patch release? (was Re: 1.9.1のリリース時期について) — "Yusuke ENDOH" <mame@...> 2007/12/10

遠藤と申します。

[#32643] Re: Next 1.8.6 patch release? (was Re: 1.9.1のリリース時期について) — "Yusuke ENDOH" <mame@...> 2007/12/19

遠藤です。

[#32409] Re: [ruby-cvs:21293] Ruby:r14056 (trunk): * signal.c (trap_signm): SIGVTALRM no longer used for green — SASADA Koichi <ko1@...>

 ささだです.

10 messages 2007/11/30

[ruby-dev:32187] 特立のクラスのために新しいオペレータの提案

From: Jordi <mumismo@...>
Date: 2007-11-08 16:02:12 UTC
List: ruby-dev #32187
こんにちは、
このメールは長いけどこれを読めばいい。本当に値すると思います。
Rubyを進歩できる新しいオペレータが見付かったと思います。
長いから面白い物だけを読みたかったら記下の ==The cool stuff== から読んでください。

==イベントを探す==

まだ初心者だから次のクラスは間違えがあったら許してください。
僕はタイマーが欲しかった。Google で探してこのようなソースを見付かりました。

class Timer

 def start (timeout)
 th = Thread.new do
   loop do
     # タイマーの仕事
     sleep(timeout)
   end
 end
 end
end

これはいいだけどこのタイマーのクラスは時間だけじゃなくて他の仕事もしているじゃないか?
それはあまりよくありません。
また、このクラスを使いたかったら、新しいタイマーをつくるはずですから。


だから、自分で次のクラスを作った:

class Timer

 def initialize (*arguments)
 connections=[]
 @arguments=arguments
 end
 def register_work ( pointer)
 connections += pointer
 end
 def deregister_work (pointer)
 connections -= pointer
 end
 def deregister_all
 connections =[]
 end
 def list
 connections.each { |l| puts "#{l}" }
 end

 def start (timeout)
 th = Thread.new do
   loop do
     # work done by the timer
     connections.each { |l| l.call(*@arguments) }
     sleep (timeout)
   end
 end
 end

end


pointerは他のオブジェクトのメソッドです。
このクラスは一般的に使えるようになりました。
仕事は仕事をしなければならないクラスの中でしています。
タイマーは時間と関係がある仕事だけしています。
それに、タイマーは一つ、たくさんのメソッドと繋ぎ合わせます。


これはいいだけど、いつも毎クラスにこのいくつのメソッドを作るのはよくありません。
もちろん、mixinを使ったらこの機能を実現できるけどRubyの言語の中でそれしたらいいと思いました。

この機能はC++でsignals and slotsというです
一般的な情報:
http://doc.trolltech.com/4.3/signalsandslots.html

実現の比較について:
http://scottcollins.net/articles/a-deeper-look-at-signals-and-slots.html


== The cool stuff ==

基本的なRubyのクラスに新しいメソッドを少ないするように実現したいと思いました。それに、上の比較の一番いい結果を実現したいです。
これするために Method と Proc に新しいオペレータを加えたほうがいいと思います。

例えば

Page, Timer, Counter のクラスがあります。Page は is the parent.

class Page

 def initialize
 counter = Counter.new
 t=Timer.new

 t.timeout -> counter.update
 counter.overrun -> show_error

 end

end


-> は 繋ぐのオペレータです。
タイマーのtimeoutが行ったらcounterはupdateします
counterはoverrunの時Pageはエラーをみせます
タイマーの中でtimeoutの時単にtimeout()を呼びます。だから、タイマーは自分の仕事して、外の世界と繋いているけど一般的なクラスになりました。
だからクラスはcommunicationがあるけど同時に本当の特立なクラスです。

"->" を書いたけど確かに他の信号のほうがいいです。
それに他のオペレータを使ってdisconnectもできるの機能はやくにたちます。

この機能の実現は速いはずです。 methodまたはproc終った後でpointer to
procがあります。このpointerのリストは単に順番に呼ばれています。


オペレータよりメソッドが使うほうが面白かったら connect と disconnect は簡単です。



私の下手な日本語を許してください。

--
Jordi Polo (ジョルデイ ポロ)
奈良先端科学技術大学院大学 情報科学研究科
自然言語処理学講座 D1

In This Thread

Prev Next