标签: chaining

在运行时创建和存储方法链的方法

我遇到的问题是我需要做大约40多次转换才能将松散类型的信息转换为存储在db,xml文件等中的强类型信息.

我打算用元组标记每种类型,即这样的转换形式:

host.name.string:host.dotquad.string
Run Code Online (Sandbox Code Playgroud)

它将提供从输入到输出表单的转换.例如,名称存储在字符串类型的主机字段中,输入转换为字符串类型的dotquad表示法并存储回主机字段.更复杂的转换可能需要几个步骤,每个步骤都是通过方法调用完成的,因此方法链接.

进一步检查上面的例子,元组'host.name.string'的字段主机名为www.domain.com.执行DNS查找以将域名转换为IP地址.应用另一种方法将DNS查找返回的类型更改为string类型的dotquad的内部类型.对于这种转换,有4个单独的方法被称为从一个元组转换为另一个元组.其他一些转换可能需要更多步骤.

理想情况下,我想了解一个在运行时如何构造方法链的小例子.开发时间方法链接相对简单,但需要页面和代码页来覆盖所有可能性,并且需要40多次转换.

我想做的一种方法是,在启动时解析元组,并将链写出到一个程序集,编译它,然后使用反射来加载/访问.它真的很丑陋,否定了我希望获得的性能提升.

我正在使用Mono,所以没有C#4.0

任何帮助,将不胜感激.鲍勃.

chaining c#-2.0

6
推荐指数
1
解决办法
488
查看次数

编写一个返回值的jQuery插件

我正在编写一个jQuery插件,在某些情况下存储一些数据.

我想以一种非常灵活的方式编写它,我可以更改输入参数以获取插件存储的某些值.

说明:

当我打电话$("#any").myPlugin(),我的插件初始化创建div和一些a内.单击a.index()使用该.data()方法存储它.如果我打电话,$("#any").myPlugin("getSelection")那么我想得到存储的值.data().

我尝试过的:

(function ($) {
    $.fn.myPlugin = function (action) {
        if (action == null) action = "initialize";

        return this.each(function ($this) {
            $this = $(this);

            if (action == "initialize") {
                $this.html('<div></div>');
                var div = $("div", $this);

                div.append('<a>A</a>').append('<a>B</a>').append('<a>C</a>');

                div.children("a").each(function (i) {
                    $(this).click(function (event) {
                        // Here I store the index.
                        $this.data($(this).index());
                        event.preventDefault();
                        return false;
                    });
                });

                return $this;
            } else if (action == …
Run Code Online (Sandbox Code Playgroud)

jquery jquery-plugins chaining jquery-chaining

6
推荐指数
1
解决办法
8564
查看次数

jQuery链接动画没有插件

在使用jQuery之前,我可以做一个链接动画,延迟时间如下:

$("#element").delay(45).animate({ }, 45)
             .delay(45).animate({ }, 45)
             .delay(45).animate({ }, 45);
Run Code Online (Sandbox Code Playgroud)

现在,自从更新到v1.6.1而不是执行之前的操作之后,它现在跳到最后一个动画.忽略之前的陈述.我知道我可以为每个动画做一个不完整的回调,但这只是弄乱了:

$("#element").delay(45).animate({ }, 45, function(){
    $("#element").delay(45).animate({ }, 45, function(){
        $("#element").delay(45).animate({ }, 45);
    })
}) 
Run Code Online (Sandbox Code Playgroud)

有谁知道如何以简单干净的方式实现这一目标?

jquery animation chaining

6
推荐指数
2
解决办法
300
查看次数

如何使用OR条件链接选择器(如果main为空,则替换结果集)

我现在拥有的:

var result = $('selector1');
if (result.length == 0) result = $('selector2');
Run Code Online (Sandbox Code Playgroud)

但是这会打败链子.

问题是 - 如何使用JQuery链接获得相同的结果?

我不能使用$('selector1, selector2'),因为这总是会为两个选择器选择结果集,而我selector2只有在没有匹配元素时才需要结果selector1.

javascript jquery jquery-selectors chaining

6
推荐指数
1
解决办法
578
查看次数

是否可以在一个赋值语句中将多个方法链接到委托?

我想将两个(可能更多的未来)方法链接到一个委托,并且想知道是否有办法在一个赋值语句中执行此操作,例如

我有一个委托方法签名定义为

public delegate void MaskRequestSection(Request request); 
Run Code Online (Sandbox Code Playgroud)

...和使用此签名的2种方法,即......

public void MaskCvnSection(Request request)
{
    // do the masking operation
}

public void MaskCardNumberSection(Request request)
{
    // do the masking operation
}
Run Code Online (Sandbox Code Playgroud)

目前,我正在使用以下实例化delegete,将2个​​方法链接到它然后调用它们...

private void HideDetailsInRequest(Request request)
{
    MaskRequestSection maskRequestSection = MaskCvnSection;
    maskRequestSection += MaskCardNumberSection;
    maskRequestSection(request);
}
Run Code Online (Sandbox Code Playgroud)

....我只是好奇为什么我不能在下面的一个声明中链接两个代表,

MaskRequestSection maskRequestSection = MaskCardNumberSection+ MaskCvnSection;
Run Code Online (Sandbox Code Playgroud)

......但是如果有另一种方式可以在一个声明中完成.我无法在MSDN上找到任何专门针对此问题的内容,而我只是在问自己的好奇心.

提前致谢.

c# delegates chaining

6
推荐指数
1
解决办法
1192
查看次数

流畅的界面和类复杂性

问题:使用许多方法实现流畅的接口会使类复杂度指标增长得非常快.

如何保持实现流畅界面的类的低复杂性?

有关特定课程的一些信息:

  • Class已经有25种方法,还会再增加15种方法.
  • 类中的所有方法都以$this->wrapped某种方式转换对象.
  • 几个(5-7)方法重用已经存在的方法(那些方法可以提取到类并通过继承添加,这里没有问题).

已经考虑过选项:

  1. 特征 - 我想支持PHP 5.3及更高版本.
  2. 每个方法一个类 - 大规模扩展链,不好.
  3. '插件' - 辅助类以某种方式注入"主类",通过魔术方法调用,并通过@method注释添加自动完成支持.

高度期待任何选项的反馈(关于设计,性能,可维护性等).

检查过的例子:

  1. Lodash:170- areh方法,1类,8400行

  2. Doctrine2 QueryBuilder:40 + 40-ish方法,2个类,1400 + 600行代码; 通过ExpressionBuilder课程分开

  3. Symfony2 FormBuilder:10-areh暴露方法,1类,300行


问题可以被认为是与语言无关的 - 从PHP实现和设计观点的答案都同样受欢迎.

编辑:

目的是对函数式编程尼斯(易于使用和易于维护)工具(map,reduce,等)

php language-agnostic fluent-interface chaining

6
推荐指数
1
解决办法
651
查看次数

$ q.reject和AngularJS链接承诺中的处理错误

我无法理解链接承诺的错误处理的基本概念.为了学习规则,我写了一个简单的例子,猜测结果是什么.但不幸的是,它不会像我一样表现.我已经阅读了很多关于这个主题的文章,但由于我的英语不好,我可能无法得到细节.

无论如何,这是我的代码:

    var promiseStart = $q.when("start");
    var promise1 = promiseStart.then(function() {
            return Serviceforpromise1.get();
    });
    var promise2 = promise1.then(function(data1)
    {
            return Serviceforpromise2.get(data1);
    },function(error)
    {
            return $q.reject();
    });
    var promiseend = promise2.then(function(data2)
    {
            return data2;
    },function(error)
    {
            return error;
    });
    return promiseend;
Run Code Online (Sandbox Code Playgroud)

嗯,我知道它可以更好地编码,但它只是为了这个目的.以下是Serviceforpromise1函数的代码:

    function Serviceforpromise1()
    {
            ...
            return $http.get(*whatever*).then(function (data){
                return data;
            },function(error)
            {
                return $q.reject();
            });
    }
Run Code Online (Sandbox Code Playgroud)

仅考虑Serviceforpromise1失败的情况.一个$ q.rejec t被送回主链上,所以我在等待的"错误回调promise1.然后( "被称为和它的工作如预期,我决定为例子错误transfert到" promise2.然后 "所以在这个错误回调我添加了行返回$ q.reject() ;但它从未达到第二个错误回调(" promise2 .then "一个)我不明白为什么(像Serviceforpromise1,我返回了一个拒绝承诺!)

我很乐意深入了解这里发生的事情.谢谢你的帮助.

javascript chaining promise angularjs

6
推荐指数
1
解决办法
1万
查看次数

在JavaScript中链接'绑定'和'调用'?

当我读到这个答案时,找到var g = f.call.bind(f);.我第一眼看不到这一点.

那么它有一些直接意义,并有一些适当的使用场景吗?

当你在链接中使用call(or apply)或者bind同时使用时,会发生什么?有一些法律吗?

javascript chaining

6
推荐指数
1
解决办法
1023
查看次数

如何履行承诺

我知道这不是很傻,但如何开始一个承诺链?我有,例如,

var p = new Promise(function(resolve,reject) {
  setTimeout(function() {
    return resolve("Hi from promise after timeout");
  },1000);
});
Run Code Online (Sandbox Code Playgroud)

怎么运行呢?它应该是这样的,

when(p)
.then(function(msg) {
  console.log(msg);
})
.catch(function(error) {
  console.error(error);
});
Run Code Online (Sandbox Code Playgroud)

但是when没有定义.

chaining node.js promise

6
推荐指数
1
解决办法
4480
查看次数

使用以前链接的值,然后在Java 8中编写lambda

我的同事首选的Java 8编码风格一直在链接异步调用,例如

CompletionStage<E> someMethod() {
    return doSomething().thenCompose(a -> {
      // ...
      return b;
    }).thenCompose(b -> {
      // ...
      return c;
    }).thenCompose(c -> {
      // ...
      return d;
    }).thenApply(d -> {
      // ...
      return e;
    });
}
Run Code Online (Sandbox Code Playgroud)

我有类似上面的内容,但有一个额外的挑战:我需要回忆一些lambda中检索到的值,在后来的lambda中.例如,

CompletionStage<E> someMethod() {
    return doSomething().thenCompose(a -> {
      // ...
      Foo foo = fooDAO.getFoos(a);
      // ...
      return b;
    }).thenCompose(b -> {
      // ...
      return c;
    }).thenCompose(c -> {
      // ...
      Bar bar = barDAO.getBars(foo);
      // ...
      return d;
    }).thenApply(d -> {
      // ... …
Run Code Online (Sandbox Code Playgroud)

java chaining java-8 completable-future

6
推荐指数
1
解决办法
319
查看次数