标签: equality

.NET委托平等?

无论如何,我认为这是个问题.我正在使用RelayCommand,它使用两个委托来装饰ICommand.一个是_canExecute的Predicate,另一个是_execute方法的Action.

---背景动机 -

动机与单元测试ViewModel的WPF演示有关.一个常见的模式是我有一个具有ObservableCollection的ViewModel,我想要一个单元测试来证明该集合中的数据是我期望的一些源数据(也需要转换为ViewModel的集合).即使两个集合中的数据在调试器中看起来相同,但由于ViewModel的RelayCommand上的相等失败,看起来测试失败了.这是失败的单元测试的一个例子:

[Test]
    public void Creation_ProjectActivities_MatchFacade()
    {
        var all = (from activity in _facade.ProjectActivities
                   orderby activity.BusinessId
                   select new ActivityViewModel(activity, _facade.SubjectTimeSheet)).ToList();

        var models = new ObservableCollection<ActivityViewModel>(all);
        CollectionAssert.AreEqual(_vm.ProjectActivities, models);
    }
Run Code Online (Sandbox Code Playgroud)

---回到代表平等----

这是RelayCommand的代码 - 它基本上是对Josh Smith的想法的直接剽窃,我试图解决这个问题时添加了相等的实现:

public class RelayCommand : ICommand, IRelayCommand
{
    readonly Action<object> _execute;
    readonly Predicate<object> _canExecute;

    /// <summary>Creates a new command that can always execute.</summary>
    public RelayCommand(Action<object> execute) : this(execute, null) { }

    /// <summary>Creates a new command which executes depending on the logic in the …
Run Code Online (Sandbox Code Playgroud)

wpf delegates equality mvvm relaycommand

1
推荐指数
1
解决办法
1973
查看次数

为什么NSString有时会使用等号?

可能重复:
了解Objective-C中的NSString比较

刚刚读到关于平等与身份的关系,我意识到在比较我的objc代码中的字符串时,我一直在使用一些相同的符号.奇怪的是,它实际上是时不时地工作,我想知道为什么.

http://www.karlkraft.com/index.php/2008/01/07/equality-vs-identity/

我有两段代码,一个是工作,一个不是.

工作.这里我有一个名为'Category'的对象,它有一个名为'name'的NSString属性.

@property (nonatomic, retain) NSString *name;
Run Code Online (Sandbox Code Playgroud)

然后我有一个函数,我传入一个'Catergory'指针,当我在这里使用等号时,它完美地工作.

 -(void)addCategoryToStorage:(Category*)newcategory {
      if(newcategory.name != @"All") {  // this works
Run Code Online (Sandbox Code Playgroud)

不工作.这里我使用NSFileManager调用的输出;

NSArray *dirContent = [self.fileManager 
                       contentsOfDirectoryAtPath:@"MyFiles"
                       error:nil];
Run Code Online (Sandbox Code Playgroud)

然后我尝试比较数组中的NSStrings:

for(int i = 0; i < [dirContent count]; i++) { 
    if([dirContent objectAtIndex:i] == @"MyFile") // This will never be True
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,这两个NSString指针的工作方式有何不同?我知道我不应该使用"=="但此刻,但我很好奇为什么它有时会起作用.

我注意到他们调试之间有些区别.在第一种情况下,"newcategory"的"名称"表示(__ NSCFConstantString*)并且值可见.由于某种原因,"dirContent"数组包含两个(__NSString*)对象,其中值不可见.

这提出了另一个问题.是什么让NSString在第一种情况下变成常量?当我将它传递给函数时,它似乎与它的创建方式有关.当我分配一个具有NSString属性的新对象然后我传入一个函数时,该函数将其视为一个常量(对象的NSString属性).但是当对象存储在列表中并通过将[array objectAtIndex:index]传递给函数来获取它时,函数不会将其作为常量(对象的NSString属性)获取.

谢谢!

string identity equality objective-c nsstring

1
推荐指数
1
解决办法
852
查看次数

Lisp中的'eq'是否相反?

我比较两个列表的第一个值,有两个结果,它们是相等的还是不相等的.我的第一个IF声明是:

(if (eq (car L1) (car L2)))
Run Code Online (Sandbox Code Playgroud)

我可以使用'eq'的反面吗?

喜欢...

(if (not eq (car L1) (car L2)))
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激!

lisp if-statement equality

1
推荐指数
1
解决办法
217
查看次数

Haskell中元组上的模式匹配相等

对于关于元组对称相等的这个函数,

symEq :: Eq a => (a,a) -> (a,a) -> Bool
symEq (x,y) (u,v) = (x,y) == (u,v) || (x,y) == (v,u)
Run Code Online (Sandbox Code Playgroud)

我想用模式匹配重写它,如下所示,

symEq' :: Eq a => (a,a) -> (a,a) -> Bool
symEq' (x,y) (x,y) = True
symEq' (x,y) (y,x) = True
symEq' _ _ = False
Run Code Online (Sandbox Code Playgroud)

后者因为x和的冲突定义错误而失败y.如何重写symEq并利用模式匹配?

haskell tuples equality pattern-matching

1
推荐指数
1
解决办法
900
查看次数

使用strdup从字符串转换的c ++ char*与原始原始字符串不相等

我想知道为什么将字符串转换为char*似乎使新的char*不等于它来自的字符串.

如果我有:

//raw versions of the string:
string s = "fun";
char* c = "fun";

char* s_convert = strdup(s.c_str()); //converting the string to char*

printf("(string) == 'fun' -> %d\n", (s == "fun"));
printf("(char*) == 'fun' -> %d\n", (c == "fun"));
printf("(char* convert) == 'fun' -> %d\n", (s_convert == "fun"));

printf("(string) == (char*) -> %d\n", (s == c)); //does new char* equal original string
Run Code Online (Sandbox Code Playgroud)

生产:

(string) == 'fun' -> 1 //true
(char*) == 'fun' -> 1  //true
(char* convert) == 'fun' …
Run Code Online (Sandbox Code Playgroud)

c equality cstring strdup

1
推荐指数
1
解决办法
463
查看次数

为什么Object.Equals更喜欢从实例调用String.Equals?

我准备在C#上进行认证,并面对以下问题(为简单起见编辑代码):

class Class
{
    public string Name { get; set; } = "hello";
}

...

Class a = new Class();
Class b = new Class();
Class c = a;

Assert.IsTrue(a.Name == b.Name);
Assert.IsTrue(a.Name.Equals(b.Name));
Assert.IsTrue(Object.Equals(a.Name, b.Name));

Assert.IsTrue(a.Name == c.Name);
Assert.IsTrue(a.Name.Equals(c.Name));
Assert.IsTrue(Object.Equals(a.Name, c.Name));

Assert.IsTrue(a.Name == a.Name);
Assert.IsTrue(a.Name.Equals(a.Name));
Assert.IsTrue(Object.Equals(a.Name, a.Name));
Run Code Online (Sandbox Code Playgroud)

所有这些断言都过去了.

认证测试的转储表明这Object.Equals(*.Name, *.Name)是正确的答案并且*.Name.Equals(*.Name)是错误的.

为什么?

c# string equality

1
推荐指数
1
解决办法
114
查看次数

比较来自不同类的2个实例的公共字段

java中是否有更简单的方法来比较不同类的实例的公共字段(相同名称和类型),而无需显式检查每个字段与另一个字段.

moo.getFoo() == doo.getFoo();
moo.getRoo().equals(doo.getRoo())
Run Code Online (Sandbox Code Playgroud)

-

Class Moo {
  private int foo;
  private Object roo;
}

Class Doo {
  private int foo;
  private Object roo;

  private String ho;
}
Run Code Online (Sandbox Code Playgroud)

或者至少在这种情况下是否可能

Class Doo extends Moo {    
  private String ho;
}
Run Code Online (Sandbox Code Playgroud)

java compare equality class equals

1
推荐指数
1
解决办法
125
查看次数

用DecEq实现'等于Vect'

我试图实现以下内容:

headEqual : DecEq a => (x : a) -> (y : a) -> Maybe (Dec (x = y))
headEqual x y = case decEq x y of
                  Yes Refl  => Just (Yes Refl)
                  No contra => Nothing

vectEqual : DecEq a => (xs : Vect n a) -> (ys : Vect n a) -> Maybe (Dec (xs = ys))
vectEqual []         []         = Just (Yes Refl)
vectEqual (x :: xxs) (y :: yys) = case headEqual x y of …
Run Code Online (Sandbox Code Playgroud)

equality idris

1
推荐指数
1
解决办法
78
查看次数

比较Swift String和NSAttributedString

如何比较NSAttributedString和Swift字符串,例如:

let string = "test string"
let attributedString = NSAttributedString(string: string)
let areStringsEqual = attributedString == string
Run Code Online (Sandbox Code Playgroud)

将编译。

equality nsattributedstring swift

1
推荐指数
1
解决办法
548
查看次数

如何在Python中调用默认的字符串相等函数?

我会假设:

import numpy as np
a = np.array(["a", "b", "c"])
print(a == "abc")
print("abc" == a)
Run Code Online (Sandbox Code Playgroud)

输出

[False False False]
False
Run Code Online (Sandbox Code Playgroud)

,因为后者的比较应该为字符串使用相等的定义,而前者的比较应该为NumPy数组使用相等的定义。

实际输出为:

[False False False]
[False False False]
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况[1],如何防止这种情况发生[2]?

[1]即为什么str.__eq__ NotImplemented

[2]也就是说,如果np.ndarray.__eq__不执行,如何调用执行的相等性检查?

[编辑]该问题被标记为与elementwise比较字符串1-d numpy数组可能重复,但不是,因为提出了完全相反的要求(基本上是如何使用np.ndarray.__eq__),并且[1]和[2]都不是讨论过。

python equality operators python-3.x

1
推荐指数
1
解决办法
45
查看次数