无论如何,我认为这是个问题.我正在使用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) 刚刚读到关于平等与身份的关系,我意识到在比较我的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属性)获取.
谢谢!
我比较两个列表的第一个值,有两个结果,它们是相等的还是不相等的.我的第一个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)
任何帮助将非常感激!
对于关于元组对称相等的这个函数,
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并利用模式匹配?
我想知道为什么将字符串转换为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#上进行认证,并面对以下问题(为简单起见编辑代码):
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)是错误的.
为什么?
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) 我试图实现以下内容:
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) 如何比较NSAttributedString和Swift字符串,例如:
let string = "test string"
let attributedString = NSAttributedString(string: string)
let areStringsEqual = attributedString == string
Run Code Online (Sandbox Code Playgroud)
将编译。
我会假设:
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]都不是讨论过。