在比较字符串值时,我会一直开始使用===(三等号,严格比较),但现在我发现了
"foo" === new String("foo")
Run Code Online (Sandbox Code Playgroud)
是假的,与此相同:
var f = "foo", g = new String("foo");
f === g; // false
Run Code Online (Sandbox Code Playgroud)
当然:
f == g; // true
Run Code Online (Sandbox Code Playgroud)
那么建议总是使用==进行字符串比较,或者总是在比较之前将变量转换为字符串?
我之前从未真正这样做过,所以我希望有人可以告诉我正确实现我的类的Except()和GetHashCode()的重写.
我正在尝试修改类,以便我可以使用LINQ Except()方法.
public class RecommendationDTO{public Guid RecommendationId { get; set; }
public Guid ProfileId { get; set; }
public Guid ReferenceId { get; set; }
public int TypeId { get; set; }
public IList<TagDTO> Tags { get; set; }
public DateTime CreatedOn { get; set; }
public DateTime? ModifiedOn { get; set; }
public bool IsActive { get; set; }
public object ReferencedObject { get; set; }
public bool IsSystemRecommendation { get; set; }
public int VisibilityScore { get; …Run Code Online (Sandbox Code Playgroud) 我正在尝试测试向量的所有元素是否彼此相等.我提出的解决方案似乎有点迂回,都涉及检查length().
x <- c(1, 2, 3, 4, 5, 6, 1) # FALSE
y <- rep(2, times = 7) # TRUE
Run Code Online (Sandbox Code Playgroud)
用unique():
length(unique(x)) == 1
length(unique(y)) == 1
Run Code Online (Sandbox Code Playgroud)
用rle():
length(rle(x)$values) == 1
length(rle(y)$values) == 1
Run Code Online (Sandbox Code Playgroud)
一个允许我包含容差值的解决方案,用于评估元素之间的"平等",这是避免FAQ 7.31问题的理想选择.
是否有我完全忽略的测试类型的内置函数?identical()并all.equal()比较两个R对象,因此它们在这里不起作用.
编辑1
以下是一些基准测试结果.使用代码:
library(rbenchmark)
John <- function() all( abs(x - mean(x)) < .Machine$double.eps ^ 0.5 )
DWin <- function() {diff(range(x)) < .Machine$double.eps ^ 0.5}
zero_range <- function() {
if (length(x) == 1) …Run Code Online (Sandbox Code Playgroud) php中==和===有什么区别?我不确定何时使用两者.
更新的注释:因此它显示在StackOverflow搜索中,==和===之间的差异与!=和!==之间的差异相同.
书中说"功能和闭包是参考类型".那么,你怎么知道引用是否相等?==和===不起作用.
func a() { }
let å = a
let b = å === å // Could not find an overload for === that accepts the supplied arguments
Run Code Online (Sandbox Code Playgroud)
以下是Catterwauls如何处理这个问题:
可能重复:
php == vs === operator
对我确定的人来说,这是一个简单的答案.有人可以解释为什么这个表达式评估为真?
(1234 == '1234 test')
Run Code Online (Sandbox Code Playgroud) 我试图了解引擎盖下的python哈希函数.我创建了一个自定义类,其中所有实例都返回相同的哈希值.
class C(object):
def __hash__(self):
return 42
Run Code Online (Sandbox Code Playgroud)
我只是假设上面的类中只有一个实例可以随时出现在一个集合中,但实际上一个集合可以有多个具有相同散列的元素.
c, d = C(), C()
x = {c: 'c', d: 'd'}
print x
# {<__main__.C object at 0x83e98cc>:'c', <__main__.C object at 0x83e98ec>:'d'}
# note that the dict has 2 elements
Run Code Online (Sandbox Code Playgroud)
我进行了一些实验,发现如果我重写__eq__方法使得类的所有实例比较相等,那么该集只允许一个实例.
class D(C):
def __eq__(self, other):
return hash(self) == hash(other)
p, q = D(), D()
y = {p:'p', q:'q'}
print y
# {<__main__.D object at 0x8817acc>]: 'q'}
# note that the dict has only 1 element
Run Code Online (Sandbox Code Playgroud)
所以我很想知道dict有多个具有相同哈希的元素.谢谢!
注意:编辑问题以给出dict(而不是set)的例子,因为答案中的所有讨论都是关于dicts的.但这同样适用于集合; 集合也可以有多个具有相同散列值的元素.
我对这三个的理解是:
.Equals()测试数据平等(缺乏更好的描述)..Equals()可以为同一对象的不同实例返回True,这是最常被覆盖的方法.
.ReferenceEquals() 测试两个对象是否是同一个实例,并且不能被覆盖.
==ReferenceEquals()默认情况下与此相同,但可以覆盖此项.
但C#站说:
在对象类中,
Equals和ReferenceEquals方法在语义上是等效的,除了ReferenceEquals它只在对象实例上有效.该ReferenceEquals方法是静态的.
现在我没理解.任何人都可以对此有所了解吗?
我在Python解释器中运行以下代码:
>>> foo = 10
>>> dir(foo) == dir(10)
True
>>> dir(foo) is dir(10)
False
>>>
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
什么之间的区别eq,eql,equal和equalp,在Common Lisp的?我知道其中一些检查类型,其中一些检查所有类型,但哪个是哪个?什么时候比其他人更好用?
equality ×10
c# ×2
comparison ×2
equals ×2
php ×2
python ×2
boolean ×1
closures ×1
common-lisp ×1
dictionary ×1
gethashcode ×1
hash ×1
javascript ×1
object ×1
operators ×1
r ×1
set ×1
swift ×1
syntax ×1
vector ×1