不知何故,我应该能够指定这样的链,同时值通过每个函数进行管道传输。
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) 我来自 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(), …
我有这个代码:
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
我有为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) 如果我这样编码:
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班级不支持?
内部任务如何进行?