虽然试图优化我的代码,我发现了一些logical
操作进行比较,以类似的操作时,比我预想的要慢integer
或numeric
.
于是我就到重写基本布尔运算符!
,&
,|
,xor
如下:
my.not <- function(x) as.logical(1L - as.integer(x))
my.and <- function(e1, e2) as.logical(as.integer(e1) * as.integer(e2))
my.or <- function(e1, e2) as.logical(as.integer(e1) + as.integer(e2))
my.xor <- function(e1, e2) as.logical(as.integer(e1) + as.integer(e2) == 1L)
Run Code Online (Sandbox Code Playgroud)
测试一切是否按预期工作:
a <- sample(c(TRUE, FALSE), 1e6, TRUE)
b <- sample(c(TRUE, FALSE), 1e6, TRUE)
identical(!a, my.not(a)) # TRUE
identical(a & b, my.and(a, b)) # TRUE
identical(a | b, my.or(a, b)) # TRUE
identical(xor(a, b), my.xor(a, b)) …
Run Code Online (Sandbox Code Playgroud) 我有点困惑!a&&(a||b)
.如果我直接看它并简单地解释它,它看起来好像是一样的
!a&&a or !a&&b
Run Code Online (Sandbox Code Playgroud)
但这似乎有点奇怪,因为既然a
不可能是真实的,那么只有后者是真的才会成真.我也像这样解释它
!a || a&&b
Run Code Online (Sandbox Code Playgroud)
我真的不知道我是如何想出这个,但它看起来更合乎逻辑,因为没有矛盾.有人可以帮我吗?
现在,我有一些基本上像这样的代码:
data Expression
= Literal Bool
| Variable String
| Not Expression
| Or Expression Expression
| And Expression Expression
deriving Eq
simplify :: Expression -> Expression
simplify (Literal b) = Literal b
simplify (Variable s) = Variable s
simplify (Not e) = case simplify e of
(Literal b) -> Literal (not b)
e' -> Not e'
simplify (And a b) = case (simplify a, simplify b) of
(Literal False, _) -> Literal False
(_, Literal False) -> Literal False …
Run Code Online (Sandbox Code Playgroud) 我有两个变量,可以是true或false.我通过在数据库上查询某些产品ID的存在与否来获得这些.
现在我需要设置另一个变量,它将是true或false.当两个变量都为真或两者都为假时,它将是真值.这将是假的一个是真的而另一个是假的.
目前我使用if语句来处理它
if ( v1 == true && v2 == true )
result = true;
else if ( v1==false && v2 == false )
result = true;
else if ( v1 == true && v2 == false )
result = false;
else if ( v1==false && v2 == true )
result = false;
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做到这一点?
如何检查20个变量是否都为真,或者20个变量都是假的?
如果可能的话,如果没有使用真的长
变量实际上是数组元素:
array('a'=> true,'b'=> true ...)
使它更清楚:
php conditional boolean-logic boolean conditional-statements
我有以下代码,它将告诉我代码中的其他地方是否使用了某个属性.这背后的想法是验证具有private
setter 的属性是否可以只读.
这里有多个陷阱,但主要的是在构造函数之外对属性的赋值意味着它不会触发.此外,静态属性可能只在静态构造函数中具有赋值以触发诊断.同样,实例属性只需要一个实例构造函数.
现在,到目前为止我已经考虑了大多数场景,但ReSharper在这段代码中给了我一个警告,我似乎无法弄清楚它的逻辑.以上规范在这段代码中翻译:
var isStaticProperty = propertySymbol.IsStatic;
bool hasInstanceUsage = false;
bool hasStaticUsage = false;
foreach (var identifier in outerClass.DescendantNodes().OfType<IdentifierNameSyntax>())
{
var memberSymbol = context.SemanticModel.GetSymbolInfo(identifier);
if (memberSymbol.Symbol.Equals(propertySymbol))
{
var constructor = identifier.Ancestors().OfType<ConstructorDeclarationSyntax>()
.FirstOrDefault();
var isInConstructor = constructor != null;
var isAssignmentExpression = identifier.Ancestors()
.OfType<AssignmentExpressionSyntax>()
.FirstOrDefault() != null;
// Skip anything that isn't a setter
if (!isAssignmentExpression)
{
continue;
}
// if it is a setter but outside the constructor, we don't report any diagnostic
if (!isInConstructor)
{ …
Run Code Online (Sandbox Code Playgroud) 在SQL的Wikipedia页面上,有一些关于SQL中布尔逻辑的真值表.[1]维基百科页面似乎源于SQL:2003标准.
equals运算符(=)的真值表与SQL:2003草案中的IS运算符不同.
此外,维基百科文章指出"IS NULL"(<null predicate>)是一种特殊情况.
在SQL:2003中,似乎有一个"IS"操作符,它是一个常规运算符,如AND,NOT和OR.但是,<null谓词>仍然存在.
当IS是常规布尔运算符时,为什么<null谓词>存在?它是否确保您可以使用具有非布尔值的"IS NULL"构造而不使用类型coersion?不鼓励使用"= NULL"吗?
SQL:2011标准的工作方式不同吗?
[1]:关于SQL的维基百科
[2]:SQL:2011草案 PDF第335页
[3]:SQL:2003草案 PDF第397页
它是一回事吗?还是有一点点差异?我只是想确保我不会误解任何事情.
在我寻找一些问题的帮助时,我遇到了这个:
p.Enabled = p.Enabled != true;
Run Code Online (Sandbox Code Playgroud)
这到底是什么意思?我以前从未见过它,
nb:前一行是 var p = this.PageRepository.GetPage(id);
我想知道是否有人知道编译器解释以下代码的方式:
#include <iostream>
using namespace std;
int main() {
cout << (true && true || false && false) << endl; // true
}
Run Code Online (Sandbox Code Playgroud)
这是真的,因为&&的优先级高于|| 或因为|| 是一个短路运算符(换句话说,短路运算符是否忽略所有后续表达式,或只是下一个表达式)?