不确定如何更好地说出这一点(因此,无法找到以前的答案,但我希望之前已经得到了解答),但我对是否有办法转换代码感兴趣:
if ( this.props.mailboxFilter == 'sent' ) {
return this.currentUser.canActOnBehalfOf( m.senderID );
} else {
return !this.currentUser.canActOnBehalfOf( m.senderID );
}
如下所示(不确定如何更好地表达它):
var bangOrNot = this.props.mailboxFilter == 'sent ? '!' : '';
bangOrNot( this.currentUser.canActOnBehalfOf( m.senderID ) );
有没有办法通过选择是否用一声巨响调用return
行来避免扩展的if / else语法和所有重复?
答案 0 :(得分:9)
您可以通过其他方式简化它:
db = DriverManager.getConnection(
"jdbc:mysql://74.220.192.113/advanfc7_atm",
"myuserid",
"mypwd");
通常,如果函数更改任何状态,您可能希望避免使用此方法。但是,因为在这种情况下你无论如何都在调用它,所以首先缓存它的值是没有害处的。
答案 1 :(得分:5)
如果this.currentUser.canActOnBehalfOf( m.senderID )
allways返回一个布尔值,你可以做XOR。
return (this.props.mailboxFilter != 'sent') ^ this.currentUser.canActOnBehalfOf(m.senderID);
XOR与true
的布尔值产生NOT。与false
的XOR创建一个保持相同值的缓冲区。
请注意,我已将==
更改为!=
。
并且,如果您打算实际使用它,请确保对代码的这一部分进行注释。一段时间后阅读此代码并不容易。
<强>更新强>
如Bergi所述,最好使用布尔XOR !=
返回布尔值。
return (this.props.mailboxFilter != 'sent') != this.currentUser.canActOnBehalfOf(m.senderID);
当然,如果它也可以与布尔XNOR一起使用,只需在上面的代码中用!=
替换==
。
答案 2 :(得分:3)
你想在这里使用布尔XNOR运算符 - 也称为等价:
return this.currentUser.canActOnBehalfOf(m.senderID) == (this.props.mailboxFilter == 'sent');
答案 3 :(得分:0)
关于为什么或为什么不做这样的事情,有许多好的评论。我假设OP有充分的理由想要在函数调用的结果前应用bang(!)。我的回答更多是OP问题的技术解决方案。
function bang(r) {
return !r;
}
function notBang(r) {
return r;
}
function canActOnBehalf() {
return true;
}
var filter = 'notsent';
var f = (filter == 'sent' ? bang : notBang);
f(canActOnBehalf('whatever'));
答案 4 :(得分:-4)
假设您正在使用javascript,则可以使用eval
方法来评估一串javascript代码。您可以有条件地将爆炸应用于字符串的前面,然后返回eval
的结果。