当前位置: 首页>>代码示例>>C#>>正文


C# IokeObject.Become方法代码示例

本文整理汇总了C#中Ioke.Lang.IokeObject.Become方法的典型用法代码示例。如果您正苦于以下问题:C# IokeObject.Become方法的具体用法?C# IokeObject.Become怎么用?C# IokeObject.Become使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Ioke.Lang.IokeObject的用法示例。


在下文中一共展示了IokeObject.Become方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: ActivateWithCallAndDataFixed

        public static object ActivateWithCallAndDataFixed(IokeObject self, IokeObject context, IokeObject message, object on, object call, IDictionary<string, object> data)
        {
            DefaultSyntax dm = (DefaultSyntax)self.data;
            object result = dm.ExpandWithCall(self, context, message, on, call, data);

            if(result == context.runtime.nil) {
                // Remove chain completely
                IokeObject prev = Message.GetPrev(message);
                IokeObject next = Message.GetNext(message);
                if(prev != null) {
                    Message.SetNext(prev, next);
                    if(next != null) {
                        Message.SetPrev(next, prev);
                    }
                } else {
                    message.Become(next, message, context);
                    Message.SetPrev(next, null);
                }
                return null;
            } else {
                // Insert resulting value into chain, wrapping it if it's not a message

                IokeObject newObj = null;
                if(IokeObject.dataOf(result) is Message) {
                    newObj = IokeObject.As(result, context);
                } else {
                    newObj = context.runtime.CreateMessage(Message.Wrap(IokeObject.As(result, context)));
                }

                IokeObject prev = Message.GetPrev(message);
                IokeObject next = Message.GetNext(message);

                message.Become(newObj, message, context);

                IokeObject last = newObj;
                while(Message.GetNext(last) != null) {
                    last = Message.GetNext(last);
                }
                Message.SetNext(last, next);
                if(next != null) {
                    Message.SetPrev(next, last);
                }
                Message.SetPrev(newObj, prev);

                // We need to distinguish explicit calls to self, and calls through a local context.
                object receiver = (prev == null || Message.IsTerminator(prev)) ? context : on;
                return Interpreter.Send(message, context, receiver);
            }
        }
开发者ID:goking,项目名称:ioke,代码行数:49,代码来源:DefaultSyntax.cs

示例2: ActivateWithCallAndData

        public override object ActivateWithCallAndData(IokeObject self, IokeObject context, IokeObject message, object on, object call, IDictionary<string, object> data)
        {
            object result = ExpandWithCall(self, context, message, on, call, data);

            if(result == context.runtime.nil) {
                // Remove chain completely
                IokeObject prev = Message.GetPrev(message);
                IokeObject next = Message.GetNext(message);
                if(prev != null) {
                    Message.SetNext(prev, next);
                    if(next != null) {
                        Message.SetPrev(next, prev);
                    }
                } else {
                    message.Become(next, message, context);
                    Message.SetPrev(next, null);
                }
                return null;
            } else {
                // Insert resulting value into chain, wrapping it if it's not a message

                IokeObject newObj = null;
                if(IokeObject.dataOf(result) is Message) {
                    newObj = IokeObject.As(result, context);
                } else {
                    newObj = context.runtime.CreateMessage(Message.Wrap(IokeObject.As(result, context)));
                }

                IokeObject prev = Message.GetPrev(message);
                IokeObject next = Message.GetNext(message);

                message.Become(newObj, message, context);

                IokeObject last = newObj;
                while(Message.GetNext(last) != null) {
                    last = Message.GetNext(last);
                }
                Message.SetNext(last, next);
                if(next != null) {
                    Message.SetPrev(next, last);
                }
                Message.SetPrev(newObj, prev);

                return ((Message)IokeObject.dataOf(message)).SendTo(message, context, context);
            }
        }
开发者ID:vic,项目名称:ioke-outdated,代码行数:46,代码来源:DefaultSyntax.cs


注:本文中的Ioke.Lang.IokeObject.Become方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。