我目前面临一个难题:将两个javascript对象连接在一起的正确方法是什么?
想象一下像文本编辑器这样的应用程序,它有几个不同的文件.我有一些HTML页面代表笔记本的视图.我有一个文件notebook.js,其中包含NotebookController和Notebook View的类定义.
NotebookControler对象负责在笔记本上执行业务逻辑,如"保存笔记本","加载笔记本","新笔记本".NotebookView负责管理用于演示的HTML.它做低级别的东西,如"获取/设置笔记本电脑主体""获取/设置笔记本名称".它还侦听DOM事件(onClick)并触发业务事件(saveNotebook).这是我对被动视图模式的尝试.
我希望我的javascript客户端代码是面向对象的,分离的关注点和单元可测试的.我想用模拟NotebookView测试NotebookController,反之亦然.这意味着我不能只在NotebookController中实例化NotebookView.我也是
在Java中,选择是自然的:使用Spring.但这似乎不是JavaScript-y.什么是正确的做法?
我想要创建的是一个Silverlight应用程序,其中包含一些选项卡/模块,这些选项卡/模块都将是单独的DLL.
我看到PRISM有Shell/Module概念,似乎是针对UI做的,我找到了一个很好的演示(展示了如何搜索digg/twitter).
但听起来MEF将包含在VS2010中,所以我想选择这个选项.
谁能以某种方式清楚地解释这些差异?(我不是高级程序员)
我似乎记得F#的旧版本允许在匹配序列时进行结构分解,就像列表一样.有没有办法在保持序列延迟的同时使用列表语法?我希望避免大量调用Seq.head和Seq.skip 1.
我希望有类似的东西:
let decomposable (xs:seq<'a>) =
match xs with
| h :: t -> true
| _ -> false
seq{ 1..100 } |> decomposable
Run Code Online (Sandbox Code Playgroud)
但这仅处理列表并在使用序列时给出类型错误.当使用List.of_seq时,它似乎会评估序列中的所有元素,即使它是无限的.
我正在编写一个扩展方法来解析任何给定类型的JSON字符串.我想在类型上使用方法而不是像我们已经知道的许多示例那样的实例,但我有点觉得Visual Studio不支持它.有人可以在这里启发我吗?以下是方法:
public static T ParseJson<T>(this T t, string str) where T: Type
{
if (string.IsNullOrEmpty(str)) return null;
var serializer = new JavaScriptSerializer();
var obj = serializer.Deserialize<T>(str);
return obj;
}
Run Code Online (Sandbox Code Playgroud)
我想以这种方式调用方法:
var instance = MyClass.ParseJson(text);
Run Code Online (Sandbox Code Playgroud)
谢谢
class p {
public string Name { get; set; }
public int Age { get; set; }
};
static List<p> ll = new List<p>
{
new p{Name="Jabc",Age=53},new p{Name="Mdef",Age=20},
new p{Name="Exab",Age=45},new p{Name="G123",Age=19}
};
protected static void SortList()
{
IComparer<p> mycomp = (x, y) => x.Name.CompareTo(y.Name); <==(Line 1)
ll.Sort((x, y) => x.Name.CompareTo(y.Name));<==(Line 2)
}
Run Code Online (Sandbox Code Playgroud)
这里List.sort需要一个IComparer<p>as参数.并且它与lambda一起使用,如第2行所示.但是当我尝试按照第1行的方式执行时,我收到此错误:
无法将lambda表达式转换为System.Collections.Generic.IComparer类型,因为它不是委托类型
我调查了很长一段时间,但我仍然不明白.也许我对IComparer的理解不是很好.可以有人帮我一把吗?
所以我有我的活动,按下"退出"按钮我调用Activity.finish().这有效地关闭了我的申请.
问题:我的应用程序的Dalvik过程仍然像背景中的僵尸一样闲逛.看起来这是正常的,因为其他应用程序也这样做.甚至hello-world示例也在内存中徘徊.
我可以忍受这个,但不幸的是这种行为使我的应用程序的开发变得痛苦.我有一个连接到我的Activity的远程服务,并且在我的Activity卸载之前这个服务不会卸载(正如它所说的那样).
一切都以某种方式保持活着,没有任何理由.
我怎样才能真正从记忆中删除我的活动?
我正在寻找像Activity.finish_and_kill_my_process_please()调用或类似的东西.
我有一个double打印出来0.000000,我试图比较它0.0f,但没有成功.为什么这里有区别?什么是最可靠的方法来确定你的双倍是零?
我是DRY和KISS原则的追随者,但上周我有一个案例,两者似乎互相矛盾:
对于我正在做的应用程序,我必须实现一个循环,执行以下操作:
这是一个例子:
for (A a : listOfA) {
listOfB.add(BFactory.convertFromAToB(a));
}
Run Code Online (Sandbox Code Playgroud)
在代码中,我必须做大约4次,将类型(例如D,E等)转换为另一种类型.我可能无法更改我要转换的类型,因为它们是我们必须在app中使用的第三方类型.
所以我们有:
for (A a : listOfA) {
listOfB.add(BFactory.convertFromAToB(a));
}
for (C a : listOfC) {
listOfB.add(DFactory.convertFromCToD(c));
}
...
Run Code Online (Sandbox Code Playgroud)
所以,为了不违反干,我提出了一个通用的解决方案:
private interface Function<S, T> {
T apply(S s);
}
public <S, T> void convertAndCopy(List<S> src, List<T> dst, Function<S, T> f) {
for (S s : src) {
dst.add(f.apply(s));
}
}
Run Code Online (Sandbox Code Playgroud)
电话看起来像这样:
convertAndCopy(listOfA, listOfB, new Function<A, B>() {
A apply(B b) {
return CFactory.convertFromBToC(b); …Run Code Online (Sandbox Code Playgroud) 例:
from __future__ import division
import numpy as np
n = 8
"""masking lists"""
lst = range(n)
print lst
# the mask (filter)
msk = [(el>3) and (el<=6) for el in lst]
print msk
# use of the mask
print [lst[i] for i in xrange(len(lst)) if msk[i]]
"""masking arrays"""
ary = np.arange(n)
print ary
# the mask (filter)
msk = (ary>3)&(ary<=6)
print msk
# use of the mask
print ary[msk] # very elegant
Run Code Online (Sandbox Code Playgroud)
结果是:
>>>
[0, 1, 2, 3, 4, …Run Code Online (Sandbox Code Playgroud)