うーむ。AnonymousMethodExpressionって認識されている。
ICSharpCode.OldNRefactory.Ast.LocalVariableDeclarationとしては認められているようだ。なら何故…。
http://slashdot.jp/~Ryo.F/journal/541889
自信なし。正解ならスコープは関係ない。確かにこれは紛らわしい。
[Array]$x = @()
[Array]$y = $x
[Object]::ReferenceEquals($x,$y)
$x += 5
[Object]::ReferenceEquals($x,$y)
[HashTable]$x = @{}
[HashTable]$y = $x
[Object]::ReferenceEquals($x,$y)
$x['abc'] = 5
[Object]::ReferenceEquals($x,$y)
Controlling the Scope of Variables - Windows PowerShell Blogに見られるように、外側とは別の変数のようなのだが、関数に入った段階では、その外側にある同名変数の内容が内側のローカル変数にそのまま代入されている。そのまま使えるようになっている。PowerShell仕様のサンプル(3.5 Scopesの3.5.1 Introduction)のほうがわかりやすいけど。
代入されているかと思ったけど、そうでもないようだ。[Object]::ReferenceEquals($local:x,$x)はfalseなので。
ああ、26進数で考えちゃだめですよ。Excelで確認しましたがZZが702で、AAAが703。「桁数が正しく出せれば」それほど苦戦はしなさそう。
3ケタ以下でA→0,B→1,C→2とおくなら、最初はAじゃなくてAAAのはず。" "→0,"A" →1と置くならこれは27進数、じゃあ"Z"の次は何だ?"AA"ではなく"A "ってことになる。
難しく考えすぎてた
…たった12時間前に自分で書いたコードなのに何で1を引いているのかわからなくなってるorz
俺は構文解析をBNF等を読み込むツールを使って行いたいと思っている。
で、C#のSpartというライブラリを使ってみたわけであるが…基本的にこれ、文字列に対するものなんだよね。
BlackJumboDogのソースを個人的に読みにくいと感じたので、自分が書いてみるとどーなるかなーって実験的に書いたりしている。その過程で、httpのリクエストをパースしたいなあ、と思ったんだ。が…文字列だけで構成されているとは限らんのよね。個人的にパーサを使わずに(文字列だけで済むことがほぼ確定している)ヘッダの部分だけを切り出したくはないんだけど。ASCIIは127までで、128以降は符号位置がそのまま1バイトに変換されないんだよね。文字としてごまかしてパースすることも出来なさそうなんで、あきらめるしかないのかなあ
BlackJumboDogのソースから。
if (Environment.UserName == "SYSTEM") {
Service.ServiceMain();
return;
}
コンパイルオプションで分岐する方が好みに近いかも。
多分KanelクラスというのはKernelのつもりなんだろう
そのKanelクラスに日本語であるかどうかを示すBoolean型プロパティJpがあり、それに応じてメニューバー等の内容を日本語か英語か変えているようだが…System.ResourceManager.CreateFileBasedResourceManagerとか、System.Globalization.CultureInfo.CurrentUICultureとか使ってみる気はないかな?
KanelクラスにmainFormを渡しているが、これ必要か?nullとの比較は、ここじゃなくて外で計算してbool値を持たせればよいはず。「ログ表示用クラスにFormを渡し、そっちでFormに追加」よりも「ログ用のクラスを用意して、Form側で、イベントを追加していく」とかやればいい話なのでは?Loggerクラスは追ってないから後で追う。
「Ver5.2.4 過去のバージョンのファイルを削除する」のは警告とか表示しなくて大丈夫?
MenuStrip menuStripをKanelクラスのコンストラクタの引数に渡すんじゃなくて、コンストラクタを実行し、Form側でプロパティ経由とかでListOptionインスタンスを受け取ってメニューを追加していくことはできないだろうか?個人的にできる限りこの層にはUIに関することを持ち込みたくないんだよな…なんとなく。
DnsCacheってKanelクラス側にあるべきか?極力DNS.Serverクラス側に持っていきたいんだが。
クラスの名前が気に入らんなあ
ListOptionとListServerとListToolはクラスにする必要がないと思う。System.Windows.Forms.MenuItemに関する内容はMainFormに。その土台となる内容は、Kernelの単体のメソッドでいい。使うのはもとからあるListだけで十分。nullを追加する可能性がある件は放置もしくは例外による対処任せにしたい。
メニューの作成自体はKernelクラスで作ったデータを、Form側でどうにかする。引数に渡したものを利用するんじゃなくてメソッド自体が戻り値を返すようにして外側で追加する。
Attributeとかその部類も活用してみたいなあ