コード例 #1
0
        public void Func()
        {
            var bindings = new Bindings();

            bindings.Bind("a0", () => { return(true); });
            var a0 = bindings.CallBinding("a0");

            Assert.IsTrue((bool)a0);

            bindings.Bind("a1", (int p1) => { return(p1); });
            var a1 = bindings.CallBinding("a1", 1);

            Assert.AreEqual(1, a1);

            bindings.Bind("a2", (int p1, int p2) => { return(p1 + p2); });
            var a2 = bindings.CallBinding("a2", 1, 2);

            Assert.AreEqual(3, a2);

            bindings.Bind("a3", (int p1, int p2, int p3) => {
                return(p1 + p2 + p3);
            });
            var a3 = bindings.CallBinding("a3", 1, 2, 3);

            Assert.AreEqual(6, a3);

            bindings.Bind("a4", (int p1, int p2, int p3, int p4) => {
                return(p1 + p2 + p3 + p4);
            });
            var a4 = bindings.CallBinding("a4", 1, 2, 3, 5);

            Assert.AreEqual(11, a4);
        }
コード例 #2
0
        public void Action()
        {
            var bindings = new Bindings();

            bool a0 = false;

            bindings.Bind("a0", () => a0 = true);
            bindings.CallBinding("a0");
            Assert.IsTrue(a0);

            int a1 = 0;

            bindings.Bind("a1", (int p1) => a1 = p1);
            bindings.CallBinding("a1", 1);
            Assert.AreEqual(1, a1);

            int a2 = 0;

            bindings.Bind("a2", (int p1, int p2) => { a1 = p1; a2 = p2; });
            bindings.CallBinding("a2", 2, 3);
            Assert.AreEqual(2, a1);
            Assert.AreEqual(3, a2);

            int a3 = 0;

            bindings.Bind("a3", (int p1, int p2, int p3) => {
                a1 = p1; a2 = p2; a3 = p3;
            });
            bindings.CallBinding("a3", 3, 4, 5);
            Assert.AreEqual(3, a1);
            Assert.AreEqual(4, a2);
            Assert.AreEqual(5, a3);

            int a4 = 0;

            bindings.Bind("a4", (int p1, int p2, int p3, int p4) => {
                a1 = p1; a2 = p2; a3 = p3; a4 = p4;
            });
            bindings.CallBinding("a4", 4, 5, 6, 7);
            Assert.AreEqual(4, a1);
            Assert.AreEqual(5, a2);
            Assert.AreEqual(6, a3);
            Assert.AreEqual(7, a4);
        }
コード例 #3
0
        public void CallUnmappedBinding()
        {
            var bindings = new Bindings();

            bindings.Bind("foo", () => { return(true); });

            Assert.Throws <InvalidOperationException>(
                () => bindings.CallBinding("bar")
                );
        }
コード例 #4
0
        public Value Invoke(object self, Scope scope, Bindings bindings)
        {
            var values = new object[@params.Count];

            for (int i = 0; i < @params.Count; ++i)
            {
                var value = @params[i].Evaluate(scope, bindings);

                if (value == null)
                {
                    values[i] = null;
                }
                else
                {
                    values[i] = value.AsObject();
                }
            }

            if (self == null)
            {
                var result = bindings.CallBinding(name, values);
                return(Value.Covert(result));
            }
            else
            {
                var method = self.GetType().GetMethod(name);
                if (method == null)
                {
                    throw new InvalidOperationException(string.Format(
                                                            "\"{0}\" does not have function \"{1}\"",
                                                            self.GetType(), name));
                }
                var result = method.Invoke(self, values);
                return(Value.Covert(result));
            }
        }