您是否知道在数据库中组织布尔表达式的方法,同时允许表达式的无限嵌套?
例:
a = 1 AND (b = 1 OR b = 2)
Run Code Online (Sandbox Code Playgroud)
整个表达式不应存储为varchar以保持数据完整性.
在python中,如果你写的东西像
foo==bar and spam or eggs
Run Code Online (Sandbox Code Playgroud)
如果布尔语句为true,则python似乎返回垃圾邮件,否则返回egg.有人可以解释这种行为吗?为什么表达式没有被评估为像一个长布尔值?
编辑:具体来说,我试图弄清楚为什么'垃圾'或'鸡蛋'作为表达结果返回的机制.
在标量(布尔)上下文中1计算表达式时,如果表达式求值为true ,则Perl使用显式值作为结果;如果表达式求值为false,则使用空字符串.我很好奇为什么Perl使用空字符串来表示布尔值false而不是0更直观.
请注意,我并不关心Perl将空字符串视为标量(布尔)上下文中的false.
编辑
如何使用true("false"例如)字符串作为false值的字符串表示来改变现有代码的含义?我们可以说在这样的改变之后改变语义的代码不像它本来那样健壮/正确吗?我猜字符串上下文在Perl中是如此普遍,以至于导致理智语义的唯一选择是,如果布尔值在向字符串转换为字符串之后保留其值...
是否有任何java库或技术来逐步解析布尔表达式?
我的意思是给出一个这样的表达式:
T && ( F || ( F && T ) )
它可以分解为一个表达式树来显示哪个令牌导致'F'值,就像这样(可能是这样的):
T && <- rhs false
( F || <- rhs false
( F && T ) <- eval, false
)
Run Code Online (Sandbox Code Playgroud)
我试图将布尔表达式评估传达给非程序员.我和Anlr在一起,但是我无法做到这一点(似乎有一点学习曲线).
我并不反对自己写,但我宁愿不重新发明轮子.
标题可能有点模糊,但这是我所拥有的(在私有化代码中):
包含一些字段的类,包括BigDecimal和Date:
class MyObj{
private java.math.BigDecimal percentage;
private java.util.Date date;
// Some more irrelevant fields
// Getters and Setters
}
Run Code Online (Sandbox Code Playgroud)
在另一个类中,我有一个这些对象的列表(即java.util.List<MyObj> myList).我现在想要的是一个Java 8流来检查列表是否符合我的验证器的日期和百分比的正确顺序.
例如,以下列表将是真实的:
[ MyObj { percentage = 25, date = 01-01-2018 },
MyObj { percentage = 50, date = 01-02-2018 },
MyObj { percentage = 100, date = 15-04-2019 } ]
Run Code Online (Sandbox Code Playgroud)
但是这个列表是假的,因为百分比的顺序不正确:
[ MyObj { percentage = 25, date = 01-01-2018 },
MyObj { percentage = 20, date = 01-02-2018 },
MyObj { percentage = 100, …Run Code Online (Sandbox Code Playgroud) 我想知道是否有人知道编译器解释以下代码的方式:
#include <iostream>
using namespace std;
int main() {
cout << (true && true || false && false) << endl; // true
}
Run Code Online (Sandbox Code Playgroud)
这是真的,因为&&的优先级高于|| 或因为|| 是一个短路运算符(换句话说,短路运算符是否忽略所有后续表达式,或只是下一个表达式)?
我在其中一个项目中遇到过这段代码
(这是Java)
if (Boolean.TRUE.equals(foo.isBar()))
Run Code Online (Sandbox Code Playgroud)
Foo#isBar()被定义为boolean isBar(),所以它无法返回null
真的有什么理由说它应该这样写吗?我自己也会写
if (foo.isBar())
Run Code Online (Sandbox Code Playgroud)
,但也许我错过了一些微妙的东西.
谢谢
我希望将图像绑定到布尔值,并使图像的源依赖于布尔值
即true source ="image1"false source ="image2"
我想知道是否有办法内联它而不需要转换器.
在Ruby中,您可以使用Array#join将多个字符串简单地连接在一起,并使用可选的分隔符.
[ "a", "b", "c" ].join #=> "abc"
[ "a", "b", "c" ].join("-") #=> "a-b-c"
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一个很好的语法糖与一堆布尔表达式做类似的事情.例如,我需要&&一堆表达式.但是,将使用哪些表达式由用户输入确定.所以不要做一堆
cumulative_value &&= expression[:a] if user[:input][:a]
Run Code Online (Sandbox Code Playgroud)
我想先根据输入收集所有表达式,然后将&&它们一起全部收集起来.就像是:
be1 = x > y
be2 = Proc.new {|string, regex| string =~ regex}
be3 = z < 5 && my_object.is_valid?
[be1,be2.call("abc",/*bc/),be3].eval_join(&&)
Run Code Online (Sandbox Code Playgroud)
默认情况下Ruby中是否有这样的设备?如果可能的话,我只想要一些合成糖来使代码更清洁.
我想复制NA它们在R中表现的布尔值:
NA是一个有效的逻辑对象.如果x或y的分量是NA,如果结果不明确,则结果将是NA.换句话说,NA&TRUE评估为NA,但NA&FALSE评估为FALSE. http://stat.ethz.ch/R-manual/R-devel/library/base/html/Logic.html
我已经看到了None被推荐的缺失值,但是Python转换None到False评估布尔表达式时,并计算None or False到False.结果当然应该是None,因为没有给出缺失值的结论.
我如何在Python中实现这一目标?
编辑接受的答案使用按位布尔运算符正确计算,但要使用逻辑运算符实现相同的行为not,or并且and似乎需要更改Python编程语言.