在python中:
template<class T>
class Container {
template<class T1> friend class Accessor;
std::vector<T> _data;
};
template<class T>
class Accessor {
public:
void doSomething(Container<T> *c) {
std::cout << c->_data.size() << std::endl;
}
};
template<class T, template<typename> class CustomAccessor = Accessor>
struct MyBase {
typedef Container<T> MyContainer;
typedef CustomAccessor<T> MyAccessor;
};
template<class T, template<typename> class First = Accessor, template<typename> class Second = Accessor>
class Composite {
public:
typedef First<T> MyFirst;
typedef Second<T> MySecond;
void doSomething(Container<T> *c) {
MyFirst a;
a.doSomething(c);
MySecond b;
b.doSomething(c);
}
};
facebook.com/user/83426347
在咖啡脚本中我有同样的道理:
namespace = { 'host': 'facebook.com', 'user': '{somehost}/user/83426347' }
namespace['user'].format(somehost=namespace['host'])
我是CS的新手,那么如何处理与pythons相同的行为?
答案 0 :(得分:1)
的Python
language = "Python"
greet = "I love %s" % language
的CoffeeScript
language = "Coffescript"
greet = "I love #{language}"
答案 1 :(得分:1)
String.prototype.format = ->
args = arguments
return this.replace /{(\d+)}/g, (match, number) ->
return if typeof args[number] isnt 'undefined' then args[number] else match
然后你可以做类似的事情:
namespace=
host: 'facebook.com'
user: '{0}/user/42342342'
namespace.user = namespace.user.format namespace.host