我知道在PHP中链接的好处,但我们可以说有以下情况
$Mail = new MailClass("mail")
->SetFrom("X")
->SetTo("X")
->SetSubject("X")
->AddRecipient("X")
->AddRecipient("X")
->AddRecipient("X")
->AddRecipient("X")
->AddRecipient("X")
->AddRecipient("X")
->Send();
Run Code Online (Sandbox Code Playgroud)
返回和重复使用对象是否存在任何问题,如速度或未遵循最佳实践等问题
如果您是Fluent-Interface的新手:Fluent-Interfaces上的Martin Fowler,也可以很好地阅读此内容
我完全理解,它不具备进行编程这种方式,能够像这样被处理:
$Mail = new MailClass("mail");
$Mail->AddRecipien(
array(/*.....*/)
);
$Mail->SetFrom("X");
$Mail->SetTo("X");
$Mail->SetSubject("X");
$Mail->Send();
Run Code Online (Sandbox Code Playgroud)
但是让我说我有一个像这样的对象:
$Order = new Order()
->With(22,'TAL')
->With(38,'HPK')->Skippable()
->With(2,'LGV')
->Priority();
Run Code Online (Sandbox Code Playgroud)
请注意->With(38,'HPK')->Skippable(),这是此类编程的Pro的完美示例
如果其中一个函数涉及等待弹出窗口,我怎样才能获得一系列连续执行的函数?
在下面的authBegin函数中,我弹出一个窗口,完成后返回authBegin函数.
但链接当然不是等待它.我怎么能让它等到窗户回来?
am.authUnlessCurrent().authBegin().collectData();
var authModule=function(){
this.authUnlessCurrent=function(){
alert("checks auth");
};
this.authBegin=function(){
window.oauth_success = function(userInfo) {
popupWin.close();
return this;
}
window.oauth_failure = function() {
popupWin.close();
return true;
}
popupWin = window.open('/auth/twitter');
};
this.collectData=function(){
alert("collect data");
return this;
};
}
Run Code Online (Sandbox Code Playgroud) 嗯,这就是发生的事情.
$('.js-custom-dropdown').find('.custom-dropdown-unfolded').toggle();
$('.custom-dropdown-btn, .custom-dropdown-btn-unfolded').keydown(function(event){
if (event.keyCode === 13) {
openDropdown($(this));
}
}).click( function(){
openDropdown($(this));
});
function openDropdown (element){
element.parents('.js-custom-dropdown').find('.custom-dropdown-unfolded').toggle();
console.log($(this))
}
Run Code Online (Sandbox Code Playgroud)
当我单击下拉按钮时,openDropdown功能执行一次,但是当我选择按钮并按下回车键时,该功能被调用两次.猜猜这与链接有关,但我承认我是新手,并不完全理解jQuery设计模式.我可以cource在keydown处理程序中调用该函数两次,这将解决问题,但是..你知道:)
您能否解释一下代码有什么问题以及导致这种行为的原因?
我想在链中应用几个彩色滤镜到drawable.那可能吗?或者也许创建一个过滤器,它是我想要应用的过滤器的组合.
例如,我想:
Drawable d = ...;
d.setColorFilter(0x3F000000, Mode.OVERLAY).setColorFilter(0xFF2D2D2D, Mode.SCREEN)
Run Code Online (Sandbox Code Playgroud) 我想将两个(可能更多的未来)方法链接到一个委托,并且想知道是否有办法在一个赋值语句中执行此操作,例如
我有一个委托方法签名定义为
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上找到任何专门针对此问题的内容,而我只是在问自己的好奇心.
提前致谢.
我无法理解链接承诺的错误处理的基本概念.为了学习规则,我写了一个简单的例子,猜测结果是什么.但不幸的是,它不会像我一样表现.我已经阅读了很多关于这个主题的文章,但由于我的英语不好,我可能无法得到细节.
无论如何,这是我的代码:
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,我返回了一个拒绝承诺!)
我很乐意深入了解这里发生的事情.谢谢你的帮助.
基本上标题是什么 - 我想知道是否有多种方法可以.find()在同一个jQuery选择器上多次使用.或者可能.find()不止一次使用不是正确的方法吗?
这就是我想要完成的事情:
HTML
<div id="foo">
<h2>A Header</h2>
<p>Some text</p>
</div>
Run Code Online (Sandbox Code Playgroud)
JS
$("#foo").find("h2").html("New header");
$("#foo").find("p").html("New text");
Run Code Online (Sandbox Code Playgroud)
Webstorm抱怨重复的jQuery选择器.有没有不同/更好的方法来做到这一点?
g想象一下,我想通过链接子函数来实现一个函数。这可以通过以下方式轻松完成:
def f1(a):
return a+1
def f2(a):
return a*2
def f3(a):
return a**3
g = lambda x: f1(f2(f3(x)))
Run Code Online (Sandbox Code Playgroud)
然而,现在考虑一下,哪些子功能将链接在一起,取决于条件:具体来说,是预先已知的用户指定的选项。人们当然可以这样做:
def g(a, cond1, cond2, cond3):
res = a
if cond1:
res = f3(res)
if cond2:
res = f2(res)
if cond3:
res = f1(res)
return res
Run Code Online (Sandbox Code Playgroud)
然而,我认为最好g提前根据函数的组成函数来定义函数,而不是在每次调用函数时动态检查这些静态条件。不幸的是,以下给出了RuntimeError: maximum recursion depth exceeded:
g = lambda x: x
if cond1:
g = lambda x: f3(g(x))
if cond2:
g = lambda x: f2(g(x))
if cond3:
g = lambda x: f1(g(x)) …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现一组链式函数,但不知何故我卡在这里了。
interface ISimpleCalculator {
plus(value: number): this;
minus(value: number): this;
divide(value: number): this;
multiply(value: number): this;
sum(): void
}
interface ISpecialCalculator extends ISimpleCalculator {
specialPlus(value: number): ISimpleCalculator;
specialMinus(value: number): ISimpleCalculator;
}
let testCalculator: ISpecialCalculator;
testCalculator
.plus(20)
.multiply(2)
.specialPlus(40)
.plus(20)
.minus(5)
.specialMinus(20) //<-- Error! Property 'specialMinus' does not exist on type 'ISimpleCalculator'.
.sum()
Run Code Online (Sandbox Code Playgroud)
我想存档链中函数的类型检查。在上面的例子中,我希望函数specialPlus和specialMinusinISpecialCalculator只使用一次,ISimpleCalculator可以多次使用。我对打字稿很陌生,到目前为止我一直在尝试不同的方法(高级类型(Pick& Omit))但没有成功。我想知道在这种情况下有没有其他方法可以提供帮助。
我正在编写一个模块,旨在在将查询调用到数据库之前准备查询。普通 javascript 中的代码运行得很好,但是当我尝试用 Typescript 编写它时,出现了错误:Type of 'await' operand must either be a valid promise or must not contain a callable 'then' member
我的 JavaScript 代码:
class QueryBuilder {
constructor(query) {
this.query = query;
}
sort(keyOrList, direction) {
this.query = this.query.sort(keyOrList);
return this;
}
skip(value) {
this.query = this.query.skip(value);
return this;
}
limit(value) {
this.query = this.query.limit(value);
return this;
}
then(cb) {
cb(this.query.toArray());
}
}
Run Code Online (Sandbox Code Playgroud)
打字稿中的代码:
class QueryBuilder {
public query: Cursor;
constructor(query: Cursor) {
this.query = query;
}
public …Run Code Online (Sandbox Code Playgroud)