标签: metaprogramming

动态惰性实例变量记忆

在 Ruby 中,我们有两种方法来获取/设置实例变量 -instance_variable_getinstance_variable_set. 此外,在某些情况下,记住实例变量是一种很好的做法:

@foo ||= 'bar'
Run Code Online (Sandbox Code Playgroud)

因此,我尝试将这 2 个功能结合起来,因为我需要动态实例变量名称:

iv = :@foo
instance_variable_set(iv, 'bar') unless instance_variable_get(iv)
Run Code Online (Sandbox Code Playgroud)

我不确定,但是有没有更优雅的方式来写这个?

ruby metaprogramming

-1
推荐指数
1
解决办法
559
查看次数

元类和方法

在以下示例中,向元类添加方法非常有效.

class Test(object):

    def __init__(self, x):
        self.x = x

    def double(self):
        return self.x*2

# method to add
def quadruple(self):
    return self.x*4

# creating metaclass
TypeTest = type('TypeTest', (Test,), {'triple': triple, 
                                      'quadruple': quadruple})

# prints 8
TypeTest(2).quadruple()
Run Code Online (Sandbox Code Playgroud)

以下示例不起作用,我不知道为什么.它只是在解析的函数中无法识别self并且发生TypeError.

class Vehicle(object):
    def __init__(self, wheels, door=False):
        self.wheels = wheels
        self.door = door

# method to add
def check_load(self, x):
    if x > self.load:
        return "Load won't fit"
    else:
        return "Load will fit"

# creating metaclass
Truck = type('Truck', (Vehicle,), dict(wheels=4,door=True, load=100,
                                       check_load=check_load))

# …
Run Code Online (Sandbox Code Playgroud)

python metaprogramming metaclass self

-1
推荐指数
1
解决办法
74
查看次数

跨平台C++确定最大整数值(无标题)

根据编译器体系结构,使C++函数或结构,类(使用元编程)确定有符号和无符号类型的最大值.一个用于签名,另一个用于无符号数字.

要求:

  • 没有头文件
  • 自我调整到可变大小(没有stdint.h)
  • 没有关于可能溢出的编译器警告

澄清:

评论后,我很惊讶,对非典型的C++问题的反应.我已经知道强调这个问题很好,这个问题不是家庭作业,也不是来自月球,但它是实用的领域.

对于所有感兴趣的应用这些东西...首先:它不是功课:).这是基于我所面临的实际问题实用,可回答的问题 - 如SO.FAQ所建议的那样.感谢您提供有关climits等的提示,但我正在寻找"智能代码".当然climits,limits经过良好测试和良好的代码片段,但它们是巨大的,不一定"聪明,棘手".我们正在寻找智能解决方案(不是"巨大的任何"解决方案),不是吗?即使你,climits建议也没关系,作为起点.对于那些对区域感兴趣的人,其中包括头文件是不允许的,并且源代码的大小是相关的,很少有:编译器的实验,程序转换,为编程竞赛准备问题集等.实际上它们的树与问题有关I我目前正在努力.所以我不认为(SO.FAQ)过于本地化,我认为,对于(SO.FAQ)爱好者程序员来说,这是肯定的问题.如果您认为即使所有这些,这个问题都有问题,请告诉我 - 我不想再犯错误.如果没关系,请告诉我,我能做些什么来不让它失败?

c++ architecture cross-platform metaprogramming

-2
推荐指数
1
解决办法
245
查看次数

如何优雅地为数组中列出且即将执行/调用的函数和方法提供 try-catch 功能?

我有这个数组:

const arr = [
  { 'Some text': this.f('a') },
  { 'Some other text': this.f('b') }
]
Run Code Online (Sandbox Code Playgroud)

为了实现这一目标,我编写了实验代码。

arr.forEach((entry) => {
  console.log(Object.entries(entry));
})
Run Code Online (Sandbox Code Playgroud)

结果它执行了我的功能:

[[ 'Some text': 'result_f1' ]]
[[ 'Some other text': 'result_f2' ]]
Run Code Online (Sandbox Code Playgroud)

我的函数自动执行了。

但我不认为这是实现这一目标的最安全方法。我想更明确地分别执行每个函数并尝试捕获每个函数。

我想这样做的原因是将每个函数包装到一个单独的try-catch块中,因为在数组中进行尝试捕获会破坏代码的可读性

有什么想法如何实现这一目标吗?

javascript arrays metaprogramming function try-catch

-3
推荐指数
1
解决办法
809
查看次数