tuedaの日記

2016-07-24

[] 関東で地震多くね?

http://www3.nhk.or.jp/sokuho/jishin/

ここ1周間、伊豆から北関東にかけて規模はさほど大きくないもののずいぶん地震が発生している。

マジで東海地震か関東大震災のどちらかの前震だと思うんだが関東民大丈夫か。

2016-07-14

[] Roslyn for Scriptingでスクリプトに引数を与える方法が気持ち悪い件について

前から気になっていたRosly for Scriptingを試してみたのだが・・・・うーーん、俺の美的感覚が激しくこれを拒絶する。

スクリプト側にパラメーター(引数)を渡す方法が「渡したオブジェクトにアクセスできる」ではなく

「渡したオブジェクトに存在する変数/メソッドがグローバル変数/メソッドっぽくアクセスできる」ってなんやねん。

渡したいオブジェクトを集めた受け渡し専用の新しいクラスを定義することになるが、そんな糞みたいなクラスを作ることは断固拒否する。

名前空間の汚染は許せない。・・・と考えていたら良いことを思いついた。

       |
   \  __  /
   _ (m) _ ピコーン
      |ミ|
    /  `´  \
     ('A`)     無名クラスを使おう
     ノヽノヽ  
       くく

無名クラスにパックしてスクリプトに渡せばいいんじゃね? これなら名前空間は汚されない。 俺は天才か。

    class Program {
        static string code = "node.DoSomething();";

        static async void MyFunc() {
            var node = new Node();

            var globals = new {  node = node };
            var opt = ScriptOptions.Default;

            var script = CSharpScript.Create(code,  opt, globals.GetType());
            script.Compile();
            for (int i = 0; i < 10; i++) {
                await script.RunAsync(globals);
            }
        }
        static void Main(string[] args) {
            MyFunc();
        }
    }
型 'Microsoft.CodeAnalysis.Scripting.CompilationErrorException' の例外が Microsoft.CodeAnalysis.Scripting.dll で発生しましたが、
ユーザー コード内ではハンドルされませんでした

追加情報:(1,1): error CS0122: '<>f__AnonymousType0<Node>.node' is inaccessible due to its protection level

ダメだった。アクセスレベルか・・・まあダメそうな気はする。

そもそも無名クラスをその場以外で(そのスコープ以外で)使うことは想定してないよな、たぶん。

ちょっと手の打ちようがない。



よく考えたら CSharpCodeProvider で満足してるし無理にRoslyn for Scriptingを使う必要性がないの仕様が変わるまで封印決定。

2016-06-26

[] 微妙にenumの識別子を書くのがめんどいんだよなあ。何とかできないものか

キャラクターが右を向いているか左を向いているかを保持するのにenumを使うが、

        enum Direction {
            Left,
            Right
        }
        Direction dir;

この識別子(Direction)いらないんだよなあ。

     this.dir = Direction.Left;

せめて定義したクラス内部だけでも省略できないものか。

LeftとかRightとかわざわざDirectionをつけなくても見ればわかる。

C#にもRubyみたいな一行で書けるif文ほしい

Rubyの一行後置if文(?)は便利。あれは良い

    Zombie.MoveLeft() as velocity >= 0;
    Zombie.MoveRight() as velocity < 0;

2016-06-24

イギリスがEU離脱したよ!

これは驚いた。どうせ残留だろうと思っていた。

事前の調査だとやや残留派が優勢で、こういう大きな変革を求められた時は保守的な政策が支持されやすいと思って残留と判断していた。

これFXとかやってる人は上だぬきに視認が出ててるだろう。

2016-06-23 [C#] 単一変数をnewして代入する時に形名を書かなくても良いようにな

例えばプロパティに値を代入するときに非常にどうでも良いクラス名がプログラム中に現れることがよくある。

下記のコードで言えば Zombie や Zombie何とかは非常に重要なクラスだが、Vector2f ははっきり言ってどうでもいい。

代入の左辺を見れば型は自明なので書かなくてもコンパイラは困らない。

こういう時は new 演算子だけ書けばOKにしてくれないものだろうか。

        public static Node Create(float x, float y, string name) {
            var nod = new Node(name);
            var cmp1 = new Zombie();
            var cmp2 = new ZombiePhysics();
            var cmp3 = new ZombieController();
            nod.Attach(cmp1);
            nod.Attach(cmp2);
            nod.Attach(cmp3);

            // Vector2fを省略して下の形で書きたい
            nod.Position = new Vector2f(x, y);
            nod.Position = new (x, y);         

            return nod;
        }

・・・Vector2fを継承したクラスがあれば曖昧だな。プロパティがインターフェースだったら特に。

そういう場合は一番基底なのが選択されるとか・・・無理か