2004-11-02 (Tue)
_ [ソフトウェア] tDiaryQuote 0.0.4
Firefox 1.0 RC1に対応(install.rdfの<em:maxVersion>を変えただけ)。
2004-11-03 (Wed)
_ [mod_ruby] mod_rubyのlibapreqサポート
ドキュメントが無いのでmod_rubyのソースから内容を解析するしかないですが、これを使いたいなぁ。
[ゴッゴル@Devlog(2004-11-03)より引用]
実は、英語版のClassReferenceManualの方には説明があったりします...。
2004-11-07 (Sun)
_ [Ruby] モジュール関数
ゆうぞうさんとの間で認識に食い違いがあったようだ。 「モジュールの特異メソッドとしてもプライベートインスタンスメソッドとしても定義されているメソッド」という認識でよいですよね?
ゆうぞうさんは、mix-in以外でincludeを使わないらしい。 自分はどうかと言うと、置き場所が決まらない関数的なメソッドをAppName::Utilみたいなモジュールにモジュール関数として突っ込んで includeして使うことがけっこうある。
ただ、名前の衝突に弱いのがincludeの痛いところだ。 *1 C#みたいにメソッドを再定義する時はかならず、
override foo(x) ... end
とする(overrideの代りにdefで再定義しようとするとエラーか警告)、なんてのは嫌がられるだろうな。
_ [Ruby] Object#object_id
今さらながらはじめて知った。今はObject#__id__よりもこっちが推奨なのか。
もしや、Object#__send__にも代替が、と思ったけど、こっちはまだないみたい。ruby-talkで議論されていたようだ。 collect派としてはperformを推したいが、ゆうぞうさんはinvokeじゃないの?と言っていた。
-wを使わないと、Object#idのwarningが出ないのは、標準ライブラリでがんがん使われているからだろうな。
*1 includeにかぎらずだけど。そういえば、WEBrick::CGIを継承したクラスで@configというインスタンス変数を使って失敗したこともあったりして。
2004-11-12 (Fri)
_ [仕事] Ruby 講習会初級コース後半 2 日目
かずひこさんには褒めていただいたが、やっぱり初心者の方に話すのは難しいですね。ついつい、いらないことを言ってしまう。
ちなみに「勉強になります」はNaCl用語で、褒める言葉に詰まった時に使います。
2004-11-18 (Thu)
_ [Ruby] Groovyのit
RubyにGroovyのitを導入するというのはどうだろう。
ary.each { p it }
は、
ary.each { |it| p it }
と同じ意味。
ワンライナーでうれしいかもしれない。
多値を受け取りたい場合は、themで配列で受け取るとか?
sum = ary.inject(0) { them[0] + them[1] }
これは何もうれしくないな、うん。
_ [Ruby] readlineの$SAFE対応
これを押し進めると、以前前田くんが述べていたように、特別な APIを経由しない限り拡張ライブラリで定義されたメソッドは自動 的に$SAFE=2で禁止、というのも一つの考えだと思います。
[[ruby-dev:24909] Re: Process.getrlimit and Process.setrlimitより引用]
あれ、そんなこと言ってましたっけ。
それはさておき、readlineが$SAFEに対応してなかったので、対応。 cursesも怪しいな。
2004-11-25 (Thu)
_ [言語] C#のプロパティのオーバーライド
mono 1.1.2を試すと、前は通っていた以下のようなコードが通らなくなった。
using System;
public class Person {
protected string name;
public Person(string name)
{
this.name = name;
}
public virtual string Name {
get {
return name;
}
}
}
public class MutablePerson : Person {
public MutablePerson(string name) : base(name) {}
public override string Name {
set {
this.name = value;
}
}
}
public class Test {
public static void Main()
{
Person shugo = new Person("Shugo Maeda");
Console.WriteLine("shugo is {0}", shugo.Name);
MutablePerson shugo2 = new MutablePerson("Shugo Maeda");
Console.WriteLine("shugo2 is {0}", shugo2.Name);
shugo2.Name = "Studly";
Console.WriteLine("shugo2 is {0}", shugo2.Name);
}
}
mcs曰く:
$ mcs1.1.2 test.cs test.cs(21) error CS0546: 'MutablePerson.Name': cannot override because 'Person.Name' does not have an overridable set accessor test.cs(11): 'Person.Name' (name of symbol related to previous error) Compilation failed: 1 error(s), 0 warnings
どうも、Person.Nameにsetアクセサがないためにオーバーライドさせてくれないらしい。 interfaceを使うべきなんだろうなあ、と思いつつ
set { throw new NotSupportedException(); }
としてしまった。 激しい敗北感。
2004-11-27 (Sat)
_ [言語] BooのDuck Typing
「foo as duck」と書くと型チェックが動的に行われるというのが目新しい。
[Matzにっき(2004-11-26)より引用]
というとこだけ読むと、「何だ、s.is_a?(String)みたいなもん?」と思えるが、 実際には型チェックを動的に行うというより、リフレクションを使ってメソッド 呼び出しを行って、上手く行けばOK、というもののようだ。 ちなみに、duckの部分は例ではなくって、ほんとにduckと書く。
class Person:
[getter(Name)]
_name as string
def constructor(name):
_name = name
class Car:
[getter(Name)]
_name as string
def constructor(name):
_name = name
x as duck = Person("Shugo")
print(x.Name)
x = Car("March")
print(x.Name)
ここで、x as duckの部分をx as Personに変えると、もちろんCarオブジェクトの 代入の部分で(静的な)エラーになる。 ちょっとObjective-Cに似てるかもしれない。duckはidだね。
.NETだとGroovyが使えなくて残念だと思ってたけど、こっちの方が面白そうだな:)
一番気になるのは型推論がほんとにうれしいのか、という点。Haskellだと他の部分が 自分がこれまで使って来た言語と違いすぎていてそこだけ評価できないんだけど、Boo はわりと普通っぽいのでいいかもしれない。 QDBMのインタフェイス書いてちょっと使ってみようかしら。
2004-11-30 (Tue)
_ [Ruby] 引数なしのsuper
がHEADで使えなくなっててびびった。 一瞬自分が『引数なしのsuperはない方がsuper()と書かなくていいからうれしい』とか言ってたためかと思ったが、んなわけない。 define_methodで定義されたメソッドでsuperを呼ぶと落ちるバグの修正にミスがあったようだ。 何でも最近のRubyでは使われなくなっていたruby_frame->flagsを 使ったら0で初期化するのを忘れていたらしい。 テスト重要ですぞ。

_ anon [http://shugo.net/archive/tdiaryquote/にtdiaryquote_0.0.4.xp..]
_ shugo [あれ、すみません、置いておきました。]