这可能吗?例如,我有一个带有init方法的TriangleDataView类.目前该方法声明如下:
- (id)initWithFrame:(CGRect)frame delegate: (id) delegateObject;
Run Code Online (Sandbox Code Playgroud)
我想要求delegateObject符合UITextFieldDelegate协议.但那是什么语法?
我用 制作了一个文档twocolumn,但有时twocolumn对于源代码列表来说太窄了。
我找到了multicols环境,使用如下:
% \documentclass[twocolumn]{article} % 我不使用拖列,而是多列
\documentclass[]{文章}
\usepackage{multicol}
...
\begin{multicols*}{2}
\section{简而言之}
...
\end{多列*}
% 现在我使用一列
\begin{multicols*}{1}
...
\end{多列*}
结果不是我想要的。 http://img3.imageshack.us/img3/6239/screenshot20100717at920.png
我的 LaTeX 代码有什么问题?你怎么办这个案子?
我试图使用一个figure*环境,但它只是漂浮在周围,所以我宁愿不使用它。
有人可以向我解释下面这段代码有什么问题吗?
public static void main(String[] args) {
List<String> l = new ArrayList<String>();
l.add("1");
l.add("2");
l.add("3");
l.add("4");
for (int i = 0; i < l.size(); i++) {
if(l.get(i).equals("1"))
l.remove(l.get(i));
else
System.out.println(l.get(i));
}
}
Run Code Online (Sandbox Code Playgroud)
给我输出[3.4]而不是[2,3,4] ..我的[2]是什么?我对列表的这种行为感到困惑..如果有人可以解释的话,那很好..
提前致谢 :)
关于emacs的AucTeX是非常了不起的工具,但是当我写一个单独的'$'时,所有的颜色都被打破了.
通常一个'$'伴随着另一个'$'表示数学方程式,但对于源列表,经常使用单个'$'.
\begin{Verbatim}
(let ((buffer (url-retrieve-synchronously
...
(re-search-forward "^$" nil 'move) <-- It breaks the coloring
...
\end{Verbatim}
Run Code Online (Sandbox Code Playgroud)
简单的解决方案如下匹配'$'.
(re-search-forward "^$" nil 'move) ;; $
Run Code Online (Sandbox Code Playgroud)
AucTeX中有任何选项可以防止出现这个单一的'$'问题吗?
如何将以下每个元组(即列表中的元素)的内容附加到另一个已经包含"内容"的列表中?所以,我想将以下内容附加到一个非空的列表(例如:result []):
l = [('AAAA', 1.11), ('BBB', 2.22), ('CCCC', 3.33)]
Run Code Online (Sandbox Code Playgroud)
显然,以下不做的事情:
for item in l:
result.append(item)
print result
Run Code Online (Sandbox Code Playgroud)
我想要打印输出:
[something, 'AAAA', 1.11]
[something, 'BBB', 2.22]
[something, 'CCCC', 3.33]
Run Code Online (Sandbox Code Playgroud) 我有一个窗口少WPF主窗口.我试图让它最终用户可以拖动窗口.
我已将以下内容添加到Window的构造函数中:
this.MouseLeftButtonDown += delegate { DragMove(); };
Run Code Online (Sandbox Code Playgroud)
问题是,我有一个用两个按钮打开的对话框.当我单击其中一个按钮时,我得到一个未处理的InvalidOperationException,并显示消息"只能在主鼠标按钮关闭时调用DragMove".
这提出了几个问题:为什么对话框中的mousedown事件与此有关?没有这个例外我怎么能这样做?
谢谢!
Cocoa是否提供了一种内置方法来将密钥字符串转换为格式正确的set属性访问器?即"lineSpacing" -> setLineSpacing:
例如:
NSString * key = @"lineSpacing";
SEL selector = [key magicallyConvertIntoSetPropertyAccessor];
Run Code Online (Sandbox Code Playgroud)
甚至:
NSString * key = @"lineSpacing";
SEL selector = NSSelectorFromString([key toSetPropertyAccessor]);
Run Code Online (Sandbox Code Playgroud)
背景:
我正在研究一种方法,该方法将使用存储在字典中的属性值按名称设置许多属性.我无法使用,setObject:forKey因为我也将此方法用于内置类型的属性,如NSInteger和CGFloat.以下是我用于CGFloat的方法示例,用于说明:
- (void)setFloatProperty:(NSString *)key value:(CGFloat)value target:(id)object
{
NSString * setPropertyString = [NSString stringWithFormat:@"set%@",
[key capitalizedString]];
SEL selector = NSSelectorFromString(setPropertyString);
NSMethodSignature * signature = ...
NSInvocation * invocation = ...
CGFloat arg = value;
void * argument = &arg;
[invocation setArgument:argument atIndex:2];
[invocation invoke];
}
Run Code Online (Sandbox Code Playgroud)
此方法适用于"color"或"width"等单字属性,但在"lineSpacing"或"meaningOfLifeTheUniverseAndEverything"等多字属性上失败,因为该capitalize方法将所有后续字母设置为小写时将第一个字母大写.使用"lineSpacing"作为键调用上述方法会导致失败,因为正确的属性设置器将是 …
我刚买了亚马逊的单元测试艺术.我非常认真地了解TDD,所以请放心,这是一个真正的问题.
但我觉得我总是在寻找放弃它的理由.
我将在这里扮演魔鬼的拥护者并试图击败TDD的所谓好处,希望有人可以证明我错了,并帮助我对其美德更有信心.我想我错过了什么,但我无法弄清楚是什么.
1. TDD减少错误
这篇经常被引用的博客文章说,单元测试是设计工具而不是用于捕获错误:
根据我的经验,单元测试不是查找错误或检测回归的有效方法.
...
TDD是一种以交互方式设计软件组件("单元")的强大方式,以便通过单元测试指定其行为.就这样!
说得通.边缘情况仍然总是在那里,而你只会找到表面上的错误 - 无论如何,只要你运行你的应用程序就会找到它们.在构建了大量软件之后,您仍需要进行适当的集成测试.
公平地说,减少错误并不是TDD应该提供的唯一帮助.
2. TDD作为设计范例
这可能是最重要的一个.TDD是一种设计范例,可以帮助您(或强迫您)使您的代码更具可组合性.
但可组合性是多重可实现的质量; 例如,函数式编程风格使代码也可以组合.当然,完全以功能样式编写大型应用程序很困难,但是为了保持可组合性,您可以遵循某些折衷模式.
如果您从高度模块化的功能设计开始,然后根据需要仔细添加状态和IO到您的代码,您将最终得到TDD鼓励的相同模式.
例如,为了在数据库上执行业务逻辑,IO代码可以在一个函数中被隔离,该函数执行访问数据库的"monadic"任务并将其作为参数传递给负责业务逻辑的函数.这将是实现它的功能性方法.
当然,这有点笨重,所以相反,我们可以将数据库IO代码的一个子集放入一个类中,并将其提供给包含相关业务逻辑的对象.这是完全相同的事情,是功能性做事方式的改编,它被称为存储库模式.
我知道这可能会给我带来非常糟糕的鞭挞,但有时候,我不禁觉得TDD只是弥补了OOP可以鼓励的一些坏习惯 - 可以通过一点点避免功能风格的灵感.
3. TDD作为文件
TDD据说可以作为文档,但它只作为同行的文档; 消费者仍然需要文本文档.
当然,TDD方法可以作为示例代码的基础,但是测试通常包含一定程度的模拟,这些模拟不应该在示例代码中,并且通常是非常人为的,以便可以评估它们与预期结果的相等性.
一个好的单元测试将在其方法签名中描述正在验证的确切行为,并且测试将不再验证该行为.
所以,我会说,你的时间可能会更好地用于抛光你的文档.哎呀,为什么不先彻底完成文档,并称之为文档驱动设计?
4.用于回归测试的TDD
在上面的帖子中提到TDD对于检测回归并不太有用.当然,这是因为当您更改某些代码时,非显而易见的边缘情况总是会陷入困境.
关于该主题还可能需要注意的是,大部分代码在相当长的时间内保持相同的可能性很大.因此,无论何时更改代码,保留旧代码并将其结果与新函数进行比较,根据需要编写单元测试是不是更有意义?
我有一个具有三级UIViewControllers的向下钻取导航应用程序.在每个视图控制器中,我有一个UITextField,我试图为每个视图控制子类UIKeyboard.我的问题是在哪里"设置"通知并"取消设置"它们.
我有通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
Run Code Online (Sandbox Code Playgroud)
所以最好在viewDidLoad事件中设置它们?还是viewWillAppear事件?
同样如此 [[NSNotificationCenter defaultCenter] removeObserver:self];
我不希望在keyboardWillShow:向下钻取时调用多个事件.
非常感谢,布雷特
所以短版本,我不明白的是这行代码:
(new Function("paper", "window", "document", cd.value)).call(paper, paper);
Run Code Online (Sandbox Code Playgroud)
长版本,看看这些功能:
window.onload = function () {
var paper = Raphael("canvas", 640, 480);
var btn = document.getElementById("run");
var cd = document.getElementById("code");
(btn.onclick = function () {
paper.clear();
paper.rect(0, 0, 640, 480, 10).attr({fill: "#fff", stroke: "none"});
try {
(new Function("paper", "window", "document", cd.value)).call(paper, paper);
} catch (e) {
alert(e.message || e);
}
})();
};
Run Code Online (Sandbox Code Playgroud)
此代码来自Raphael playground,这意味着它实现了raphael库.所以我不理解的顶部单行代码(它在try/catch表达式中),假设将用户输入的代码复制到函数中,该代码存储在cd.value中.但那怎么可能呢?
您可以访问以下页面:http://raphaeljs.com/playground.html
latex ×2
objective-c ×2
accessor ×1
arraylist ×1
cocoa ×1
collections ×1
emacs ×1
iphone ×1
java ×1
javascript ×1
list ×1
methods ×1
nsstring ×1
properties ×1
protocols ×1
python ×1
raphael ×1
tdd ×1
testing ×1
uikeyboard ×1
unit-testing ×1
windowless ×1
wpf ×1