对我来说,翻译模式听起来非常像一个被称为格林普森第十条规则的反模式:
任何足够复杂的C或Fortran程序都包含一个特殊的,非正式指定的,错误缠身的,一半Common Lisp的缓慢实现.
也就是说,如果你需要使用Interpreter,你可能会创建一些缓慢,临时和指定不当的东西.正确的解决方案是从一开始就使用正确的语言.
或者,或者,在您的应用程序中嵌入一个众所周知且语言清晰的语言,例如Guile(GNU可嵌入方案).或者使用Haskell作为嵌入式域特定语言.
但我在实践中没有看到这一点 - 您在构建自己的嵌入式语言方面有哪些经验?这是个好主意吗?它比嵌入已有的语言更好吗?
(我不是特别喜欢lisp的粉丝.这很好,但是C和Haskell以及python和很多其他语言都是如此.)
lisp design-patterns anti-patterns greenspunning interpreter-pattern
我有两个看起来像这样的模型:
class RouteBase(models.Model):
base = models.ForeignKey("Base")
route = models.ForeignKey("Route")
sequence = models.IntegerField()
class Route(models.Model):
bases = models.ManyToManyField("Base", through="RouteBase", blank=True)
description = models.TextField(blank=True)
#and a few other attributes omitted for brevity
Run Code Online (Sandbox Code Playgroud)
...然后是一个看起来像这样的模型:
class RouteBaseForm(ModelForm):
base = forms.ModelChoiceField(queryset=Base.objects.all(), widget=forms.TextInput)
sequence = forms.IntegerField(widget=forms.HiddenInput)
class Meta:
model = RouteBase
Run Code Online (Sandbox Code Playgroud)
如您所见,序列窗口小部件是隐藏的,因为我希望这个字段由django自动处理.我希望用户只需通过文本框输入Base.序列由文本框的顺序推断.
我创建了一个带有此表单的formset,用于创建/编辑路径中的所有基础:
RouteBaseFormset = inlineformset_factory(Route, RouteBase, form=RouteBaseForm, extra=5, )
Run Code Online (Sandbox Code Playgroud)
创建此formset时,序列字段为空.在保存formset之前我需要用值填充它(否则它将不会验证).我可以想到四种方法
i=1
for form in formset.forms:
form.fields["sequence"].initial = i
i += 1
除了一个问题,这很好.当formset被提交回视图以进行保存时,使用formset创建的所有 5个额外字段都将填入序列值.当用户只想向路线添加2或3个碱基时,这会导致问题.弹出验证错误,因为该表单的必填字段"base"为空.我可以在formset被POST之后运行一些代码,检查是否存在一个base,如果没有,删除序列,但如果我要这样做,我也可以......
当formset为POST时运行一些代码,检查是否已输入Base,如果是,则添加序列,如果没有,则将该字段留空.这样,当您尝试.save()使用formset时,空值确保该特定表单不会放入数据库中.唯一的问题是我不能对表单做任何事情,直到我运行.save(commit=False)我不能做,因为formset不验证.但我可以......
通过复制request.POST变量并手动设置序列来添加序列值,但这看起来非常糟糕. …
因此,iPhone可以与蓝牙耳机配对并使用它来拨打电话(尽管带有3.0操作系统的iPod Touch无法与耳机配对,如图所示).
但是,我可以编写一个可以访问配对蓝牙设备及其功能的应用程序(如耳机的麦克风输入)吗?
这在VoIP应用程序或甚至可以使用语音聊天的Wi-Fi上播放的多玩家游戏中非常有用.
我最近一直在阅读很多关于函数式编程的东西,我可以理解它的大部分内容,但是我无法解决的一件事就是无状态编码.在我看来,通过删除可变状态简化编程就像通过删除仪表板来"简化"汽车:成品可能更简单,但运气好,使其与最终用户交互.
几乎我能想到的每个用户应用程序都将状态作为核心概念.如果您编写文档(或SO帖子),状态将随每个新输入而变化.或者,如果你玩视频游戏,有很多状态变量,从所有角色的位置开始,他们往往不断移动.如果不跟踪变化的价值,你怎么能做有用的事情呢?
每当我找到讨论这个问题的东西时,它都是用真正技术性的函数来编写的,它假设我没有大量的FP背景.有没有人知道一种方法可以向那些对命令式编码有良好,扎实理解的人解释这一点,但是谁在功能方面是完整的n00b?
编辑:到目前为止,一堆回复似乎试图让我相信不可变值的优点.我得到那个部分.这很有道理.我不明白的是,如何在没有可变变量的情况下跟踪必须改变和不断变化的值.
对于我的大学课程,我们正在开发一个多线程Blackberry应用程序,它允许我们使用蓝牙扫描运行我们应用程序的其他设备,然后通过Wifi接口通过TCP传输文件,实现NAT遍历,同时记录我们的GPS位置.(这是RIM赞助的计算机网络课程,如果还不明显的话.)
我越来越喜欢测试驱动开发,并将用它来开发我的家庭作业.但是,由于非法修饰符,我在测试期间扩展或以其他方式调用的任何Blackberry类都会给出一个ClassFormatError.我认为这个错误是由于带有Blackberry代码的jar必须是专门为其专有JVM编译的.
到目前为止,我已经使用代理模式并实现了代理的模拟对象.然而,由于我继承了许多原生Blackberry类,因此这变得非常繁琐.
我还想避免在可能的情况下启动Blackberry模拟器.启动它可能需要几分钟,这对于单元测试来说是不切实际和烦人的.
有没有简单的方法来单元测试我的Blackberry代码?
我有一些代码我想重构使用C#迭代器(即IEnumerable).不幸的是,我无法找到最好的方法来允许其他函数使用迭代器而不会导致它重新启动迭代器.
例如:
NewLineEnumerator nle = new NewLineEnumerator();
while (bytesRead > 0)
{
var nlenum = nle.Process(inputData, bytesRead);
foreach (string block in nlenum)
{
DoSomething(nlenum);
}
}
void DoSomething(IEnumerable<string> myiter)
{
foreach (var s in myiter)
{
// myiter is restarted, and begins at the start of the iterator again
}
}
Run Code Online (Sandbox Code Playgroud)
你可能会问我为什么要这样做.原因是我有一个数据流,被"命令块"包围.根据命令,我将其发送到另一个子功能进行处理.所以我想在开始时或结束时继续迭代我在流中停留的位置.
这里有什么建议?
嘿人...试图让我的模拟与asp.net MVC分类.
我在网上使用Moq找到了这个例子,基本上我理解它说:当调用ApplyAppPathModifier时,返回传递给它的值.
我无法弄清楚如何在Rhino Mocks中做到这一点,有什么想法吗?
var response = new Mock<HttpResponseBase>();
response.Expect(res => res.ApplyAppPathModifier(It.IsAny<string>()))
.Returns((string virtualPath) => virtualPath);
Run Code Online (Sandbox Code Playgroud) 我想了解jquery插件,所以我决定尝试制作一个简单的圆角盒.我知道那里已经有一些圆角插件,但这对我来说比工作要求更像是一种学习练习.
我从这里采取圆角.我喜欢这个样本,因为它不使用图像,很容易改变盒子的颜色.
我想我无法绕着最好的方式缠绕我的大脑.我有一个非常粗略的样本,它有点工作,但它感觉不对.让我兴奋的部分是在内容区域周围构建圆角.现在它需要"内容"框并附加它周围的角落.有什么更好的方法呢?
这是打电话的方式 - $('#content').roundbox();
如果这还不够,请告诉我.
//
(function($)
{
jQuery.fn.roundbox = function(options)
{
var opts = $.extend({}, $.fn.roundbox.defaults, options);
var outer = $("<div>");
var topBorder = $("<b class='xtop'><b class='xb1'></b><b class='xb2'></b><b class='xb3'></b><b class='xb4'></b></b>");
var bottomBorder = $("<b class='xbottom'><b class='xb4'></b><b class='xb3'></b><b class='xb2'></b><b class='xb1'></b></b>");
var title = $("<h1>Select Funding</h1>");
var separator = $("<div></div>");
$(this).append(title);
$(this).append(separator);
var firstElement = $(this).children()[0];
if (firstElement != null)
{
title.insertBefore(firstElement);
separator.insertBefore(firstElement);
}
outer.append(topBorder);
outer.append($(this));
outer.append(bottomBorder);
$("#fundingAdminContainer").append(outer);
//Add classes
outer.addClass(opts.outerClass); //outer container
$(this).addClass(opts.contentClass); //inner content
title.addClass(opts.titleClass); …Run Code Online (Sandbox Code Playgroud) 我确信会有一个单行将列表转换为字典,其中列表中的项目是键,字典没有值.
我发现做这件事的唯一方法是反对.
"当忽略结果时使用列表推导会产生误导和低效.for循环更好"
myList = ['a','b','c','d']
myDict = {}
x=[myDict.update({item:None}) for item in myList]
>>> myDict
{'a': None, 'c': None, 'b': None, 'd': None}
Run Code Online (Sandbox Code Playgroud)
它有效,但是有更好的方法吗?
有谁知道或知道我可以学习如何使用python和谷歌应用引擎创建自定义身份验证过程?
我不想使用谷歌帐户进行身份验证,并希望能够创建自己的用户.
如果不是专门针对谷歌应用引擎,任何资源如何使用python和django实现身份验证?
c# ×2
python ×2
asp.net-mvc ×1
blackberry ×1
bluetooth ×1
css ×1
dictionary ×1
django ×1
django-forms ×1
iphone ×1
iterator ×1
java ×1
jquery ×1
lisp ×1
list ×1
mocking ×1
moq ×1
refactoring ×1
rhino-mocks ×1
state ×1
tdd ×1
unit-testing ×1