Tag: 平等

为什么编译器发出框指令来比较引用types的实例?

下面是一个简单的genericstypes,它具有一个唯一的通用参数约束引用types: class A<T> where T : class { public bool F(T r1, T r2) { return r1 == r2; } } 由csc.exe生成的IL是: ldarg.1 box !T ldarg.2 box !T ceq 因此,在进行比较之前,每个参数都是装箱的。 但是,如果约束指示“T”不应该是一个值types, 为什么编译器试图将r1和r2框 ?

用ruby实现平等的正确方法是什么?

对于一个简单的结构类的类: class Tiger attr_accessor :name, :num_stripes end 什么是正确实现平等的正确方法,确保== , === , eql? 等等工作,所以这个类的例子在集合,哈希等等中很好地发挥作用。 编辑 另外,当你想根据没有暴露在类之外的状态进行比较时,什么是实现平等的好方法? 例如: class Lady attr_accessor :name def initialize(age) @age = age end end 在这里,我希望我的平等方法考虑到@age,但是Lady不会将她的年龄暴露给客户。 在这种情况下,我必须使用instance_variable_get吗?

如果返回a =返回b,那么a = b?

你能certificate,如果return a = return b然后a=b ? 当我使用= ,我的意思是在法律和certificate的意义上,而不是Eq意义。 我所知道的每一个monad似乎都能满足这个要求,我想不出一个有效的monad,而不是( Const a是一个函数和应用,而不是monad)。

如何比较两个string,当两者都可以为空?

我知道最好使用==运算符来调用equals方法(请参阅此问题 )。 如果两个string都为null或者它们表示相同的string,我想要两个string进行比较。 不幸的是,如果string为null则equals方法将抛出一个NPE 。 我的代码目前是: boolean equals(String s1, String s2) { if (s1 == null && s2 == null) { return true; } if (s1 == null || s2 == null) { return false; } return s1.equals(s2); } 这是不雅的。 什么是正确的方法来执行这个testing?

在Javascript中确定date平等

我需要找出用户select的两个date在Javascript中是否相同。 date传递给这个函数的string(“xx / xx / xxxx”),这就是我需要的所有粒度。 这是我的代码: var valid = true; var d1 = new Date($('#datein').val()); var d2 = new Date($('#dateout').val()); alert(d1+"\n"+d2); if(d1 > d2) { alert("Your check out date must be after your check in date."); valid = false; } else if(d1 == d2) { alert("You cannot check out on the same day you […]

集合,函数和Eq混淆

最近有一个关于Sets的讨论,Scala支持zip方法,以及如何导致bug,例如 scala> val words = Set("one", "two", "three") scala> words zip (words map (_.length)) res1: Set[(java.lang.String, Int)] = Set((one,3), (two,5)) 我想这很清楚Set s不应该支持zip操作,因为这些元素没有sorting。 然而,有人提出问题是Set不是一个真正的函子,也不应该有一个map方法。 当然,你可以通过映射到一个集合,让自己陷入麻烦。 现在切换到Haskell, data AlwaysEqual a = Wrap { unWrap :: a } instance Eq (AlwaysEqual a) where _ == _ = True instance Ord (AlwaysEqual a) where compare _ _ = EQ […]

为什么“is”关键字在string中有一个点时会有不同的行为?

考虑这个代码: >>> x = "google" >>> x is "google" True >>> x = "google.com" >>> x is "google.com" False >>> 为什么这样? 为了确保以上是正确的,我刚刚在Python上testing了Python 2.5.4,2.6.5,2.7b2,Python 3.1和Linux上的Python 2.7b1。 看起来所有人都有一致性,所以这是devise。 我错过了什么吗? 我只是发现,从我的个人域名过滤脚本失败。

与==相比,具有相同ID的对象是否总是相等?

如果我有两个对象o1和o2,我们知道 id(o1) == id(o2) 返回true 。 那么,它是否遵循这一点 o1 == o2 或者情况并非总是如此? 我正在研究的这篇论文说的不是这样,但是在我看来这应该是真的!

testing单个向量的所有元素之间的相等性

我试图testingvector的所有元素是否相等。 我提出的解决scheme似乎有些迂回,都涉及检查length() 。 x <- c(1, 2, 3, 4, 5, 6, 1) # FALSE y <- rep(2, times = 7) # TRUE unique() : length(unique(x)) == 1 length(unique(y)) == 1 用rle() : length(rle(x)$values) == 1 length(rle(y)$values) == 1 一个解决scheme可以让我包含一个评估元素之间“平等”的容忍值,是避免FAQ 7.31问题的理想之选。 是否有一个我完全忽略的testingtypes的内置函数? identical()和all.equal()比较两个R对象,所以他们不会在这里工作。 编辑1 以下是一些基准testing结果。 使用代码: library(rbenchmark) John <- function() all( abs(x – mean(x)) < .Machine$double.eps […]

为什么这两个比较有不同的结果?

为什么这个代码返回true: new Byte() == new Byte() // returns true 但是这个代码返回false: new Byte[0] == new Byte[0] // returns false