标签: method-chaining

Java 8 中的 Monadic 函数组合与链接

不知何故,我应该能够指定这样的链,同时值通过每个函数进行管道传输。

a::create -> a::processing -> a::updating -> a:uploading
Run Code Online (Sandbox Code Playgroud)

在以下文章的上下文中,我想将这些方法链接起来,其中一个方法将结果传递给下一个方法,同时修改它。

https://dzone.com/articles/higher-order-functions

https://dzone.com/articles/function-programming-java-8

我的演示将尝试展示我想要的最终结果。它将是通过管道传递给每个方法(如 monad)的单个参数/参数,并且应该更容易在链中指定任意数量的方法。

我一直在用其他语言做这件事,所以试图了解如何在 java 中做这件事。

所有方法都将接收相同类型的参数,并且仅接收一个参数。

等级值

public class Value {
    public String progress = "";
}
Run Code Online (Sandbox Code Playgroud)

类文章

public class Article {

    public void create(Value value) {
        value.progress += "creating ";
    }

    public void processing(Value value) {
        value.progress += "processing ";
    }

    public void updating(Value value) {
        value.progress += "updating ";
    }

    public void uploading(Value value) {
        value.progress += "uploading ";
    }

}
Run Code Online (Sandbox Code Playgroud)

主班

public class Main {

    public …
Run Code Online (Sandbox Code Playgroud)

java monads method-chaining function-composition

0
推荐指数
1
解决办法
2082
查看次数

Pandas - 在方法链中使用赋值和 if-else 语句

我来自 R 背景,我正在尝试mutate()从 Pandas 中的 dplyr复制该功能。

我有一个看起来像这样的数据框:

data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'], 
        'age': [42, 52, 36, 24, 73], 
        'preTestScore': [4, 24, 31, 2, 3],
        'postTestScore': [25, 94, 57, 62, 70]}
df = pd.DataFrame(data, columns = ['name', 'age', 'preTestScore', 'postTestScore'])
Run Code Online (Sandbox Code Playgroud)

我现在正在尝试创建一个名为age_bracketusingassign方法的新列,如下所示:

(df.
    assign(age_bracket= lambda x: "under 25" if x['age'] < 25 else
        ("25-34" if x['age'] < 35 else "35+"))

Run Code Online (Sandbox Code Playgroud)

这引发了我无法理解的以下错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), …

python method-chaining pandas dplyr mutate

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

如何使用隐藏的 *this 指针?

我有这个代码:

class Something
{
private:
    int m_value = 0;
public:
    Something add(int value)
    {
        m_value += value;
        return *this;
    }
    int getValue()
    {
        return m_value;
    }

};

int main()
{
    Something a;
    Something b = a.add(5).add(5);
    cout << a.getValue() << endl;
    cout << b.getValue() << endl;
}
Run Code Online (Sandbox Code Playgroud)

输出:

5
10
Run Code Online (Sandbox Code Playgroud)

我想add()返回该a对象,以便第二个add()就像(*this).add(5),但这不起作用。不过,b很好(怎么样?)。我预计a是 10,与 相同b

那么,我在哪里错过了隐藏指针的用法呢?我应该怎么做才能将a.add(5).add(5)变为10?m_valuea

c++ this method-chaining

0
推荐指数
1
解决办法
148
查看次数

如何在PHP 5.x中实现Method Chaining?

我有为PHP 5.4.x编写的以下类.这应该像我期望的那样工作吗?

class SqlBuilder {
    private $dbTable;
    private $action;
    private $data;
    private $clause;

    public function toString() {
        // $sql = generate sql string
        // [...]
        return $sql;
    }

    [...]

    public function setClause($clause) {
        $this->clause = $clause;
    }

    public function setDbTable($dbTable) {
        $this->dbTable = $dbTable;
    }   

    public function setAction($action) {
        $this->action = $action;
    }
}   
$sql = (new \dbal\SqlBuilder())
            ->setAction($this->action)
            ->setClause($this->clause)
            ->setDbTable($this->dbTable)
            ->toString();
Run Code Online (Sandbox Code Playgroud)

我希望能够访问我的所有setter方法.相反,我看到以下错误:

致命错误:在非对象上调用成员函数toString()

这似乎有效:

$builder= new \dbal\SqlBuilder();
$builder->setAction($this->action)
$builder->setClause($this->clause)
$builder->setDbTable($this->dbTable)
$sql = $builder->toString();
Run Code Online (Sandbox Code Playgroud)

但我知道这也有效:

class Foo
{
    public $a …
Run Code Online (Sandbox Code Playgroud)

php method-chaining

-1
推荐指数
1
解决办法
161
查看次数

java 8中的Periods类实现

如果我这样编码:

Period wrong = Period.ofYears(1).ofWeeks(1);
Run Code Online (Sandbox Code Playgroud)

它给出了输出P7D.

通过Period类的实现,我们知道所有of____()方法都是静态的.

但是,如果你与DateTime班级做同样的链接:

LocalDate date = LocalDate.of(2020, Month.JANUARY, 20);
LocalTime time = LocalTime.of(5, 15);
LocalDateTime dateTime = LocalDateTime.of(date, time)
  .minusDays(1).minusHours(10).minusSeconds(30);
Run Code Online (Sandbox Code Playgroud)

All minus___()plus___()方法是LocalDateTime类中的实例方法.

问题:为什么课程不允许进行方法链接Period

为什么Period班级不支持?

内部任务如何进行?

java class period method-chaining java-time

-2
推荐指数
3
解决办法
578
查看次数