尝试运行以下代码:
class Test(object):
def func_accepting_args(self,prop,*args):
msg = "%s getter/setter got called with args %s" % (prop,args)
print msg #this is prented
return msg #Why is None returned?
def __getattr__(self,name):
if name.startswith("get_") or name.startswith("set_"):
prop = name[4:]
def return_method(*args):
self.func_accepting_args(prop,*args)
return return_method
else:
raise AttributeError, name
x = Test()
x.get_prop(50) #will return None, why?!, I was hoping it would return msg from func_accepting_args
Run Code Online (Sandbox Code Playgroud)
任何人都解释为什么没有返回?
我正在研究Ruby,我的大脑只是僵住了.
在下面的代码中,我将如何为'self.total_people'编写类编写器方法?我正在试图"计算"类"Person"的实例数.
class Person
attr_accessor :name, :age
@@nationalities = ['French', 'American', 'Colombian', 'Japanese', 'Russian', 'Peruvian']
@@current_people = []
@@total_people = 0
def self.nationalities #reader
@@nationalities
end
def self.nationalities=(array=[]) #writer
@@nationalities = array
end
def self.current_people #reader
@@current_people
end
def self.total_people #reader
@@total_people
end
def self.total_people #writer
#-----?????
end
def self.create_with_attributes(name, age)
person = self.new(name)
person.age = age
person.name = name
return person
end
def initialize(name="Bob", age=0)
@name = name
@age = age
puts "A new person has been instantiated."
@@total_people …Run Code Online (Sandbox Code Playgroud) 我有一个类Wrapper,它支持添加选项,然后您可以查找.它将这些选项存储在内部哈希中@dict.
w = Wrapper.new
w.foo # => NameError
w.foo = 10
w.foo # => 10
Run Code Online (Sandbox Code Playgroud)
如何编写method_missingfor Wrapper以便我可以支持嵌套调用@dict?
w = Wrapper.new
w.foo.bar.baz = 1000
w.foo.bar.baz # => 1000
Run Code Online (Sandbox Code Playgroud) 在Scala中,有像java.lang.Class和的metaobjects java.lang.reflect.Method.但是特征存在什么元对象?
class Foo {
def foo = "foo"
}
var obj = classOf[Foo]
obj // java.lang.Class[Foo] = interface Foo
Run Code Online (Sandbox Code Playgroud)
它打印界面.这是什么?
我正在构建一个Django站点.我需要模拟许多不同的产品类别,如电视,笔记本电脑,女士服装,男鞋等.
由于不同的产品类别具有不同的产品属性,因此每个类别都有自己独立的模型:TV, Laptop, WomensApparel, MensShoes,等
对于每个模型,我创建了一个ModelForm.因此我有TVForm, LaptopForm, WomensApparelForm, MensShoesForm,等等
用户可以通过多级下拉框选择产品类别来输入产品详细信息.用户选择产品类别后,我需要显示相应的产品表单.
显而易见的方法是使用一个巨大的if-elif结构:
# category is the product category selected by the user
if category == "TV":
form = TVForm()
elif category == "Laptop":
form = LaptopForm()
elif category == "WomensApparel":
form = WomensApparelForm()
...
Run Code Online (Sandbox Code Playgroud)
不幸的是,如果不是更多类别,可能会有数百个.因此,上述方法容易出错且繁琐.
有没有什么方法可以使用变量的值category直接选择和初始化适当的ModelForm而不诉诸巨大的if-elif声明?
就像是:
# This doesn't work
model_form_name = category + "Form"
form = model_form_name()
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
我有一个方法,我打电话过期?这只是为了检查自我的对象更新后是否超过24小时,如果是这样,则返回true.这是我的方法,但虽然它有效但感觉很脏,有人能想出更好的方法来实现我的目标吗?
DAY_IN_SECS = 86400
def expired?
return true unless (Time.now <=> self.updated_at + DAY_IN_SECS) == -1
end
Run Code Online (Sandbox Code Playgroud) 我只是在探索ruby,并且想知道将一个方法添加到对象类的理论可能性.例如,定义一个接受参数的方法,并将方法添加到该参数的类中(而不仅仅是参数对象本身).像这样的例子:
class SomeClass
end
class AnotherClass
end
alpha = SomeClass.new
beta = AnotherClass.new
def AddHelloMethodTo param
# This is where I'm trying to
# add a method to the class of the parameter
def param.class.Hello
"Hello"
end
end
AddHelloMethodTo alpha
AddHelloMethodTo beta
gamma = AnotherClass.new
alpha.Hello
beta.Hello
gamma.Hello
Run Code Online (Sandbox Code Playgroud)
(对不起,如果我有语法错误/错别字我真的很新!)
请注意我怎么不调用AddHelloMethodToon gamma但我希望Hello被定义,因为我把它添加到了类中.
这可能吗?
这个:
cout << std::is_const<const int*>::value;
Run Code Online (Sandbox Code Playgroud)
打印错误,我认为它应该打印真实.为什么打印错误?
我正在尝试创建一个将传入类型的工厂,而不是将其硬编码为类型.但是,当我尝试将类型添加到类型.cpp文件内的工厂时,我将收到链接器错误.例如,他是我目前得到的链接器错误.
1> RandomClass.obj:错误LNK2019:未解析的外部符号"public:short __thiscall TemplatedFactory :: AddType(char const*)"(?? $ AddType @ VRandomClass @@@ TemplatedFactory @@ QAEFPBD @ Z)在函数"void _"中引用cdecl`动态初始化器'私有:静态短的RandomClass :: ID''(void)"(?? _E?ID @ RandomClass @@ 0FA @@ YAXXZ)
我试图让测试用例尽可能小,虽然它确实跨越了五个文件,它们非常小
BaseClass.h:http://codepad.org/MhZMw7t0
#pragma once
class BaseClass{ };
Run Code Online (Sandbox Code Playgroud)
RandomClass.h:http://codepad.org/xoObzP8G
#pragma once
#include "BaseClass.h"
class RandomClass : public BaseClass
{
private:
static short ID;
public:
RandomClass();
virtual ~RandomClass();
};
Run Code Online (Sandbox Code Playgroud)
TemplatedFactory.h:http://codepad.org/qkcTBw24
#pragma once
#include <map>
using std::map;
#include "BaseClass.h"
template<typename Type> BaseClass* createType() { return new …Run Code Online (Sandbox Code Playgroud) c++ templates design-patterns metaprogramming factory-pattern
这是一个难以理解的问题,我不确定它的正确用语是什么(如果有的话).我很好奇什么语言允许你在程序执行期间"构建"一个字符串,然后作为程序的一部分执行它.我所知道的唯一一种允许你这样做的语言是Snobol.
然而,阅读Tcl的维基百科条目,听起来它也可以做到这一点?
我一直认为这是一个很好的功能,即使它可能没有太多使用.谢谢.
PS:会用Snobol,Spitbol标记这个,但没有创建新标签的声誉.
programming-languages eval metaprogramming multistage snobol
metaprogramming ×10
ruby ×4
c++ ×2
python ×2
class ×1
django ×1
django-forms ×1
dynamic ×1
eval ×1
multistage ×1
oop ×1
refactoring ×1
scala ×1
snobol ×1
templates ×1