我有三个非常相似的控制器.我想要一个控制器,这三个扩展并共享其功能.
有时,我的老板会向我们抱怨:
为什么我们需要这么长的时间来实现一个功能?
实际上,该功能之前已经在另一个应用程序中实现,您只需要从那里复制和粘贴代码.成本应该很低.
这真的是一个难题,因为在我看来,复制和粘贴代码并不是一件简单的事情.
你有什么理由向你的非技术老板解释这个吗?
我想在同一个django模板中使用相同的{%block%}两次.我希望此块在我的基本模板中出现多次:
# base.html
<html>
<head>
<title>{% block title %}My Cool Website{% endblock %}</title>
</head>
<body>
<h1>{% block title %}My Cool Website{% endblock %}</h1>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
然后扩展它:
# blog.html
{% extends 'base.html' %}
{% block title %}My Blog{% endblock %}
# pictures.html
{% extends 'base.html' %}
{% block title %}My Pictures{% endblock %}
# cats.html
{% extends 'base.html' %}
{% block title %}My Cats{% endblock %}
Run Code Online (Sandbox Code Playgroud)
我会得到一个例外,因为Django希望块只出现一次:
在/的TemplateSyntaxError
名称为"title"的'block'标记不止一次出现
一个快速而肮脏的解决方案是将块标题复制到title1和title2:
# blog.html
{% …Run Code Online (Sandbox Code Playgroud) 我有一些简单的Java代码,在其结构中看起来与此类似:
abstract public class BaseClass {
String someString;
public BaseClass(String someString) {
this.someString = someString;
}
abstract public String getName();
}
public class ACSubClass extends BaseClass {
public ASubClass(String someString) {
super(someString);
}
public String getName() {
return "name value for ASubClass";
}
}
Run Code Online (Sandbox Code Playgroud)
我将有很多子类BaseClass,每个子类以getName()自己的方式实现该方法(模板方法模式).
这很好用,但我不喜欢在子类中使用冗余构造函数.打字更多,难以维护.如果我要更改BaseClass构造函数的方法签名,我将不得不更改所有子类.
当我从子类中删除构造函数时,我得到了这个编译时错误:
Implicit super constructor BaseClass() is undefined for default constructor. Must define an explicit constructor
我正在尝试做什么?
我将在哪里放置由多个模型共享的部分文件?我有一个名为的页面crop.html.erb用于一个模型 - Photo.现在我想将它用于另一个名为的模型User.
我可以复制并粘贴代码,但这不是很干,所以我想我会把它移到局部.
由于它是在两个模型之间共享的 - 我会在哪里放置它?
谢谢!
我发现自己对构造函数使用了哈希参数,特别是在编写用于配置的DSL或最终用户将要暴露的其他API时.我最终做的事情如下:
class Example
PROPERTIES = [:name, :age]
PROPERTIES.each { |p| attr_reader p }
def initialize(args)
PROPERTIES.each do |p|
self.instance_variable_set "@#{p}", args[p] if not args[p].nil?
end
end
end
Run Code Online (Sandbox Code Playgroud)
有没有更惯用的方法来实现这一目标?抛弃常数和符号到字符串转换似乎特别令人震惊.
我正在实现一个具有STL类接口的自定义容器.我必须提供一个常规迭代器和一个const迭代器.两个版本的迭代器的大多数代码都是相同的.我怎样才能避免这种重复?
例如,我的容器类是Foo,我正在实现FooIterator和FooConstIterator.两个迭代器都必须提供operator++()相同的方法.
我的问题类似于如何删除类似的const和非const成员函数之间的代码重复?但是那个问题的答案特定于const和非const方法,尤其是访问器.我没有看到这可能会如何推广到迭代器问题.
我应该FooIterator从FooConstIterator其他非const方法派生并扩展它吗?这要么导致虚拟方法或方法隐藏,这在这里似乎不合适.
也许FooIterator应该包含一个FooConstIterator.虽然这种方法确实减少了实现重复,但它似乎重新引入了许多样板方法定义.
是否有聪明的模板技术从单个定义生成两个迭代器?或许有一种方法 - 颤抖 - 使用预处理器来消除这些几乎相同的类.
我已经尝试查看我的本地STL实现,看看它是如何处理它的.有很多辅助类,我在设计中遇到了麻烦,但看起来功能很简单.
在以前的项目中,我的自定义容器是在标准STL容器之上构建的,所以我不必提供自己的迭代器.在这种情况下,这不是一个选项.
例如,如何避免两次写'func_name'?
#ifndef TEST_FUN
# define TEST_FUN func_name
# define TEST_FUN_NAME "func_name"
#endif
Run Code Online (Sandbox Code Playgroud)
我想遵循单点真相规则.
C预处理器的版本:
$ cpp --version
cpp (GCC) 4.1.2 20070626 (Red Hat 4.1.2-14)
Run Code Online (Sandbox Code Playgroud) 我在Appengine上使用Django.我reverse()到处都在使用django 功能,尽可能保持干燥.
但是,我在将这个应用到我的客户端javascript时遇到了麻烦.有一个JS类根据传入的ID加载一些数据.有没有一种标准的方法来对这些数据应该来自的URL进行硬编码?
var rq = new Request.HTML({
'update':this.element,
}).get('/template/'+template_id+'/preview'); //The part that bothers me.
Run Code Online (Sandbox Code Playgroud) dry ×10
django ×2
javascript ×2
ajax ×1
angularjs ×1
boilerplate ×1
c ×1
c++ ×1
const ×1
copy-paste ×1
idioms ×1
inheritance ×1
iterator ×1
java ×1
partials ×1
ruby ×1
unit-testing ×1