标签: method-chaining

TypeScript 中带有省略类型的函数链

假设我想在 TypeScript 中实现类型化函数链,但在这种情况下,调用函数会从返回类型中删除该函数。例如:

type Omit<T, K> = Pick<T, Exclude<keyof T, K>>;

interface Chainable {
  execute: () => Promise<void>;
}

interface Chain1 extends Chainable {
  chain1?: () => Omit<this, 'chain1'>;
}

interface Chain2 extends Chainable {
  chain2?: () => Omit<this, 'chain2'>;
}

let chain: Chain1 & Chain2 = {
  execute: () => null,
  chain1: () => {
    delete chain.chain1;
    return chain;
  },
  chain2: () => {
    delete chain.chain2;
    return chain;
  }
};

chain.chain1().chain2().execute(); // Using the function chain
Run Code Online (Sandbox Code Playgroud)

当我调用 时chain.chain1() …

method-chaining chaining typescript

4
推荐指数
1
解决办法
1237
查看次数

在 jestjs 中模拟嵌套函数

我有一个非常复杂的对象,我用它来模拟 DataTable() 对象以进行测试。

const obj = {
  DataTable: () => {
    return {
      columns: () => {
        return {
          data: () => {
            return {
              eq: () => {
                return {
                  indexOf: jest.fn(),
                };
              },
            };
          },
          visible: () => {
            return jest.fn();
          },
        };
      },
    };
  },
};
Run Code Online (Sandbox Code Playgroud)

在我的测试代码中,我试图监视其中一些函数,但它总是返回未定义。有没有办法模拟深层嵌套函数的返回值?

    jest.spyOn(obj.DataTable().columns().data().eq(), 'indexOf').mockReturnValue('test');
    console.log(obj.DataTable().columns().data().eq().indexOf()); // returns undefined, should return 'test'
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing method-chaining jestjs

4
推荐指数
1
解决办法
9512
查看次数

PHP:链接方法调用

可能重复:
PHP方法链接?

我偶尔会看到一些php应用程序使用这样的类:

$Obj = new Obj();
$Obj->selectFile('datafile.ext')->getDATA();
Run Code Online (Sandbox Code Playgroud)

上面的例子获取所选文件的内容然后返回它们(只是一个例子);

好吧,在我决定问你怎么做之前,我试过这个:

class Someclass {
    public function selectFile( $filename  ) { 
       $callAclass = new AnotherClass( $filename );
       return $callAclass;
    }

    // Other functions ...
}

class AnotherClass {
    protected $file_name;

    public function __construct ( $filename ) { $this->file_name = $filename; }
    public function getDATA ( ) {
        $data = file_get_contents( $this->file_name );
        return $data;

    } 

    // funcs , funcs, funcs ....

}
Run Code Online (Sandbox Code Playgroud)

这是完成这项任务的正确方法吗?请告诉我这些课程的名称.

php oop class object method-chaining

3
推荐指数
1
解决办法
4216
查看次数

JavaScript:为什么我不能用.push()链接Array.prototype.filter?

如果Array.prototype.filter返回一个数组,为什么我不能push()立即调用这个返回值?

例:

var arr = ["a", "ab", "c", "ad"];
var arr2 = arr.filter(function(elmnt) { return elmnt.indexOf("a") > -1; });
// result: ["a", "ab", "ad"]

arr2.push("aaa");
// result: ["a", "ab", "ad", "aaa"]
Run Code Online (Sandbox Code Playgroud)

好到目前为止.

但是那个push()电话号码的链接filter()呢?

var arr = ["a", "ab", "c", "ad"];
var arr2 = arr.filter(function(elmnt) { return elmnt.indexOf("a") > -1; }).push("aaa");
// result: 4
Run Code Online (Sandbox Code Playgroud)

为什么链接filter()push()导致我期望的元素数量,而不是这些元素的数组?

javascript arrays filtering method-chaining chaining

3
推荐指数
1
解决办法
2915
查看次数

返回 void 或对 self 的引用?

鉴于以下类:

struct Object {
    int x, y;
    void addtoall( int value ){ x += value; y += value; };
    Object& addtoall( int value ){ x += value; y += value; return *this; };
};
Run Code Online (Sandbox Code Playgroud)

这两个成员函数有什么区别?

我知道对于某些运算符重载(例如: operator+= )需要返回对 self 的引用,但不包括运算符重载,是否有必要?如果没有,您什么时候想要或需要返回对 self 的引用而不是返回 void?

如果这可以通过 google-fu 找到,或者是一个非常基本的问题,我深表歉意,但我不确定究竟要搜索什么(而不是因为缺乏尝试)。

c++ reference void method-chaining

3
推荐指数
1
解决办法
738
查看次数

TypeScript:如何获取子类的方法来返回父类

我试图弄清楚如何让它正常工作:

class A {
    john(): B {
        return this; // <-- ERROR HERE
    }
}

class B extends A {
    joe(): B {
        return this;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我可以做方法链接:

let instance = new B();
instance.john().joe(); 
Run Code Online (Sandbox Code Playgroud)

当然,TypeScript抱怨this与B的类型不匹配.

class method-chaining typescript

3
推荐指数
1
解决办法
568
查看次数

在 Pandas DataFrame 中删除列级别的方法链解决方案

在重塑和查询我在 pandas 中的数据时,我使用了很多方法链DataFrames。有时会为 in 索引(行)和列创建额外的和不必要的级别。如果是这样,例如在索引(行轴)上,可以使用以下方法轻松解决DataFrame.reset_index()

df.query('some query')
   .apply(cool_func)
   .reset_index('unwanted_index_level',drop=True) # <====
   .apply(another_cool_func)
Run Code Online (Sandbox Code Playgroud)

reset_index函数允许继续链方法并继续使用DataFrame.

尽管如此,我从未找到 column_axis 的等效解决方案。有吗?

python method-chaining multi-index pandas

3
推荐指数
1
解决办法
1467
查看次数

方法链和流畅接口之间的区别

我想知道方法链接和流畅接口之间的确切区别。据我了解,方法链只是运行先前方法返回对象的方法,同时避免临时变量。这方面的一个例子可能是

Integer.parseInt(str).intValue()
Run Code Online (Sandbox Code Playgroud)

相对于流式接口,对象的每个方法都由一个点链接起来,而不必与前一个方法相关这两种技术使修饰符方法返回到宿主对象,以便可以在单个表达式中调用多个修饰符,如下所示:

new Car().StartsEngine().OpenWindow()
Run Code Online (Sandbox Code Playgroud)

它是否正确?

design-patterns fluent-interface fluent method-chaining

3
推荐指数
1
解决办法
2841
查看次数

pandas 中的条件方法链接

在使用 pandas 方法链接时,是否有一种简单的通用方法可以使方法以 if 语句为条件?

模拟示例:

df = pd.DataFrame({'A':['one', 'two'], 'B':['one', 'two']})

change_to_numeric = False

df = (df
    .query("A == 'one'")
    .replace('one', 1)         # <-- Execute this row only "if change_to_numeric == True"
)
Run Code Online (Sandbox Code Playgroud)

谢谢你!

python if-statement method-chaining pandas

3
推荐指数
1
解决办法
610
查看次数

流畅的API和方法链接样式用法

当使用流畅的API编程或只使用方法链接时,我看到的风格大多是这样的:

var obj = objectFactory.CreateObject()
    .SetObjectParameter(paramName, value)
    .SetObjectParameter(paramName, value)
    .DoSomeTransformation();
Run Code Online (Sandbox Code Playgroud)

将点放在行的开头而不是行的末尾的原因是什么:

var obj = objectFactory.CreateObject().
    SetObjectParameter(paramName, value).
    SetObjectParameter(paramName, value).
    DoSomeTransformation();
Run Code Online (Sandbox Code Playgroud)

或者,这只是团队达成共识的风格吗?

c# coding-style fluent-interface method-chaining

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