标签: 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
查看次数

流畅的界面和类复杂性

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

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

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

  • 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
查看次数

使用以前链接的值,然后在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
查看次数

如何通过链接早期附加的方法将事件附加到表单的onSubmit事件?

我的应用程序实际上有数百页.现在我必须在onSubmit表单上附加一个事件'disablePage'.我不想去每一页写下:

<form name="frmname" onSubmit="disablePage();">
Run Code Online (Sandbox Code Playgroud)

我现在正在做的是: -

来自common.js文件的摘录; [包含在所有页面中]

/* we have to attach 'attachFormSubmit' method on onLoad event, 
   otherwise forms[0] will always be null. If there is any alternative, 
   then please suggest one */
if (window.addEventListener){   
    window.addEventListener('load', attachFormSubmit, false); 
} else if (window.attachEvent){ 
    window.attachEvent('onload', attachFormSubmit );
}

function attachFormSubmit(){
    forms = document.getElementsByTagName('Form');  
    if ( forms[0] ){  // there is only one form in all pages    
        if (forms[0].addEventListener){         
            forms[0].addEventListener('submit', disablePage, false); 
        } else if (forms[0].attachEvent){           
            forms[0].attachEvent('onsubmit', disablePage);
        }
    }
}

function …
Run Code Online (Sandbox Code Playgroud)

javascript javascript-events method-chaining chaining

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

XSLT拆分输出文件 - muenchian分组

我有一个XSLT文件,以便转换大量的数据.我想加一个"分裂"的功能,无论是作为一个链接的XSLT或者当前XSLT,它可以创建多个输出文件,以便限制在一定的阈值的文件的大小之内.我们假设输入XML如下:

<People>
<Person>             
<name>John</name>             
<date>June12</date>             
<workTime taskID="1">34</workTime>             
<workTime taskID="2">12</workTime>             
</Person>             
<Person>             
<name>John</name>             
<date>June13</date>             
<workTime taskID="1">21</workTime>             
<workTime taskID="2">11</workTime>             
</Person>
<Person>             
<name>Jack</name>             
<date>June19</date>             
<workTime taskID="1">20</workTime>             
<workTime taskID="2">30</workTime>             
</Person>    
</People>
Run Code Online (Sandbox Code Playgroud)

使用muenchian分组,XSLT文件如下所示.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="PersonTasks" match="workTime" use="concat(@taskID, ../name)"/>
<xsl:template match="/">
    <People>
    <xsl:apply-templates select="//workTime[generate-id() = generate-id(key('PersonTasks',concat(@taskID, ../name))[1])]"/>
    </People>
</xsl:template>

<xsl:template match="workTime">
    <xsl:variable name="taskID">
        <xsl:value-of select="@taskID"/>
    </xsl:variable>
    <xsl:variable name="name">
        <xsl:value-of select="../name"/>
    </xsl:variable>
    <Person>
        <name>
            <xsl:value-of select="$name"/>
        </name>
        <taskID>
            <xsl:value-of select="$taskID"/>
        </taskID>
        <xsl:for-each select="//workTime[../name = $name][@taskID = $taskID]">
            <workTime>
                <date>
                    <xsl:value-of select="../date"/>
                </date>
                <time>
                    <xsl:value-of …
Run Code Online (Sandbox Code Playgroud)

xslt split chaining xslt-1.0 muenchian-grouping

5
推荐指数
1
解决办法
2517
查看次数

jQuery突出显示元素中跨标签的文本片段

我想使用 jQuery 选择并返回搜索到的文本。

问题是; 部分文本可能位于<span>或其他内联元素中,因此'waffles are tasty'在此文本中搜索时:'I'm not sure about <i>cabbages</i>, but <b>waffles</b> <span>are</span> <i>tasty</i>, indeed.',您不会得到任何匹配项,而文本对人们来说是不间断的。

让我们以这个 HTML 为例:

<div id="parent">
  <span style="font-size: 1.2em">
    I
  </span>
  like turtles 
  <span>
    quite a
  </span>
  lot, actually.

  <span>
    there's loads of
  </span>
  tortoises over there, OMG

  <div id="child">
    <span style="font-size: 1.2em">
      I
    </span>
    like turtles 
    <span>
      quite a
    </span>
    lot, actually.

    TURTLES!
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

使用这个(或类似的)JavaScript:

$('div#parent').selectText({query: ['i like', 'turtles', 'loads of tortoises'], caseinsensitive: true}).each(function () {
  $(this).css('background-color', …
Run Code Online (Sandbox Code Playgroud)

javascript jquery text selection chaining

5
推荐指数
1
解决办法
4706
查看次数

在任意操作中快速选择链接?

Apple提供了一个简洁的可选链接示例

class Person {
  var residence: Residence?
}

class Residence {
  var numberOfRooms = 1
}

let john = Person()

if let roomCount = john.residence?.numberOfRooms {
  println("John's residence has \(roomCount) room(s).")
} else {
  println("Unable to retrieve the number of rooms.")
}
Run Code Online (Sandbox Code Playgroud)

想象一下尝试用一些算术运算来调整条件.这会导致编译器错误,因为模运算符不支持选项.

if john.residence?.numberOfRooms % 2 == 0 { 
  // compiler error: Value of optional type Int? not unwrapped
  println("John has an even number of rooms")
} else {
  println("John has an odd number of rooms")
}
Run Code Online (Sandbox Code Playgroud)

当然,您总是可以执行以下操作,但它缺乏可选链接的简单性和简洁性.

if …
Run Code Online (Sandbox Code Playgroud)

optional chaining ios swift

5
推荐指数
1
解决办法
635
查看次数

Java 8 流按 3 个字段分组并按总和和计数聚合生成单行输出

我知道论坛上有类似的问题,但似乎没有一个能完全解决我的问题。现在我对 Java 8 很陌生,所以请耐心等待。我有一个产品列表,例如:

Input:
name    category    type    cost
prod1       cat2     t1      100.23
prod2       cat1     t2      50.23
prod1       cat1     t3      200.23
prod3       cat2     t1      150.23
prod1       cat2     t1      100.23


Output:
Single line (name, category, type) summing the cost and count of products.




Product {
    public String name;
    public String category;
    public String type;
    public int id;
    public double cost;

}
Run Code Online (Sandbox Code Playgroud)

我需要按名称、类别和类型对其进行分组,并生成一个汇总此数据的结果,并生成每个产品的总成本和数量。大多数示例显示按两个字段分组并使用单个条件聚合。

根据论坛上的建议,我想出了这个分组:

    public class ObjectKeys {

    ArrayList<Object> keys;

    public ObjectKeys(Object...searchKeys) {

         keys = new ArrayList<Object>();

            for (int i = 0; …
Run Code Online (Sandbox Code Playgroud)

lambda chaining java-8 java-stream collectors

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

Python 类方法链接

我确实有一堂课:

class BaseModel:

    def __init__(self):
        pass

    def read_data(self):
        df = ...
        return df

    def transform_input(self, df):
        df = ...
        return df

    def execute(self, df):
        df = ...
        return df

    def run(self):
        data = self.read_data()
        data = self.transform_input(data)
        data = self.execute(data)
Run Code Online (Sandbox Code Playgroud)

如何避免这些方法相继调用?是否可以这样做:

data = self.read_data().transform_input().execute()
Run Code Online (Sandbox Code Playgroud)

是否可以以某种方式链接这些方法并解决在此方法链中传递参数(数据)的问题?

python oop chaining

5
推荐指数
1
解决办法
3866
查看次数

如何在 Angular 7 中有效地链接 Observable.subscribe 调用?

对于我正在进行的一个项目,我和我的团队正在使用 Angular 7。我们对 Angular 7 有点陌生,所以我们都在合作学习一些东西是如何工作的,与我们已经使用过的 AngularJS 相比使用了几年。

我正在阅读Observables 中关于反模式的一些建议,并注意到如下示例:

this.http.get<MyRadModel>(`api/example/rad/${this.someId}`)
  .mergeMap(radResult => {
    // ... Instructions ...
    return this.http.get<SomeOtherModel>(`api/example/other/${radResult.something}`)
  })
  .subscribe(otherResult => {
    // ... Chained instructions! ...
  });
Run Code Online (Sandbox Code Playgroud)

不用说,.pipe()由于 RxJS 的变化,你必须在 Angular 6+ 中使用它,所以实际应用它看起来有点不同......

this.http.get<MyRadModel>(`api/example/rad/${this.someId}`)
  .pipe(
    mergeMap(radResult => {
      // ... Instructions ...

      // Problem #1: 'Property something does not exist on radResult'.
      // ... It actually *does*.
      return this.http.get<SomeOtherModel>(`api/example/other/${radResult.something}`);
    }
  )
  .subscribe(otherResult => {
    // ... Chained instructions ...
  });
Run Code Online (Sandbox Code Playgroud)

我注意到的一个问题是, …

chaining observable angular

5
推荐指数
0
解决办法
2343
查看次数