著作一覧 |
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にするかは厳密に決まっているわけではなく、自分の好みで良いようだ(確かに、それはそうだな)。
ジェズイットを見習え |