| 著作一覧 |
LANの上にいきなり載るわけでもなく、TCPの上位にくるプロトコルに、なぜSYNだのACKだのEOTだのがいるのだろうか?
TCPで、ACKとかEOTとかやりとりするジグザグチャート見ると、ネイグルのアルゴリズムをどう考えているのかと(あるいは考えてないのか。というか、今も考える必要あるのかというのもあったり)。
多分、1バイトづつ読んで状態遷移表を引くんだろうな。
と、RS232Cに乗せるデータをそのままソケットに乗せたようなプロトコルを見て考えた。(でも、CRCとか付いてないんだよなこれが)
ruby-dev初めて読んだけど,アツいですね。確かにドラマかも。男たちの戦いの歌がそこにはあるのかもとか。まで言ったり。
ruby-listには登場しない男たちのドラマがそこにはある感じです :-D
今nil.to_sの議論読んでます
string s = null; System.out.WriteLine(s); or System.Console.WriteLine(s);と同じ振る舞いでもいいかなと思わないでもない。
タグ付けって、ステレオタイプのことなのか?
using System;
using System.Collections;
public class Enumerable : IEnumerable
{
int[] data;
Enumerable(int[] ary)
{
data = (int[])ary.Clone();
}
public IEnumerator GetEnumerator()
{
for (int i = 0; i < data.Length; i++)
{
yield return data[i];
}
}
public static void Main()
{
Enumerable e = new Enumerable(new int[] {1, 2, 3, 4, 5});
foreach (int x in e)
{
Console.WriteLine(x);
}
}
}
コンパイルも通るし、実行できる。あたりまえだけど。
using System;
using System.Collections.Generic;
public class Enumerable : IEnumerable<int>
{
int[] data;
Enumerable(int[] ary)
{
data = (int[])ary.Clone();
}
public IEnumerator<int> GetEnumerator()
{
for (int i = 0; i < data.Length; i++)
{
yield return data[i];
}
}
public static void Main()
{
Enumerable e = new Enumerable(new int[] {1, 2, 3, 4, 5});
foreach (int x in e)
{
Console.WriteLine(x);
}
}
}
をコンパイルすると
enum.cs(4,14): error CS0536: 'Enumerable' はインターフェイス メンバ 'System.Collections.IEnumerable.GetEnumerator() を実装しません。'Enumerable.GetEnumerator()' が public ではなく、static になっているか、または戻り値の型が正しくありません。 c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll: (以前のエラーに関連するシンボルの位置) enum.cs(11,29): (以前のエラーに関連するシンボルの位置)となる。これって、反復子とジェネリックは食い合わせられないということ? それとも僕の書き方が何か間違っている?
using System;
using System.Collections.Generic;
public class Enumerable : IEnumerable<int>
{
int[] data;
Enumerable(int[] ary)
{
data = (int[])ary.Clone();
}
IEnumerator<int> IEnumerable<int>.GetEnumerator()
{
for (int i = 0; i < data.Length; i++)
{
yield return data[i];
}
}
public System.Collections.IEnumerator GetEnumerator()
{
return ((IEnumerable<int>)this).GetEnumerator();
}
public static void Main()
{
Enumerable e = new Enumerable(new int[] {1, 2, 3, 4, 5});
foreach (int x in e)
{
Console.WriteLine(x);
}
}
}
しかも、まったーく意味がない。
foreach (string x in e) // publicがあっちなのでこう書ける
{
Console.WriteLine(x); // もちろんInvalidCastExceptionになる。
}
#ジェネリッククラスを提供するのでなければ、ジェネリックIEnumerableを継承してもほとんどおいしくない。
追記:
NAgilerさんに教えてもらったけど、もう一声が足りなかった。
using System;
using System.Collections.Generic;
public class Enumerable : IEnumerable<int>
{
int[] data;
Enumerable(int[] ary)
{
data = (int[])ary.Clone();
}
public IEnumerator<int> GetEnumerator()
{
for (int i = 0; i < data.Length; i++)
{
yield return data[i];
}
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return ((IEnumerable<int>)this).GetEnumerator();
}
public static void Main()
{
Enumerable e = new Enumerable(new int[] {1, 2, 3, 4, 5});
foreach (string x in e)
{
Console.WriteLine(x);
}
}
}
だと
Microsoft(R) Visual C# 2005 Compiler version 8.00.50727.42 for Microsoft(R) Windows(R) 2005 Framework version 2.0.50727 Copyright (C) Microsoft Corporation 2001-2005. All rights reserved. ite.cs(25,9): error CS0030: 型 'int' を型 'string' に変換できません。で、OK。インターフェイス継承したメソッドのどっちをpublicにするかは厳密に決まっているわけではなく、自分の好みで良いようだ(確かに、それはそうだな)。
ジェズイットを見習え |