标签: dynamic-properties

是否可以动态添加方法到matlab类(面向对象编程)?

编写子类dynamicprops允许我动态地向对象添加属性:

addprop(obj, 'new_prop')
Run Code Online (Sandbox Code Playgroud)

这很棒,但我也很乐意set / get为这些属性创建功能.或者分析处理这些动态属性的函数.

到目前为止,我对Matlab的经验是,一旦我创建了一个类的实例,就不可能添加新的方法.这非常麻烦,因为我的对象可能包含大量数据,每次我想要添加新方法时都要重新加载(因为我必须这样做clear classes).

那么有没有办法即时添加方法?

oop matlab class dynamic-properties

9
推荐指数
1
解决办法
2587
查看次数

在MATLAB中为依赖属性动态分配getter

在Matlab中,我可以定义一个类:

classdef klass < handle
    properties(Dependent)
        prop
    end
end
Run Code Online (Sandbox Code Playgroud)

Matlab非常高兴实例化这个类的对象,即使没有定义一个getter prop.它只在我尝试访问它时失败(可以理解).我想GetMethod根据属性的名称动态设置.

不幸的是,即使属性是Dependent,meta.property字段GetMethod仍然是只读的.虽然继承dynamicprops可以允许添加属性并以编程方式在每个实例中设置其GetMethod,但我不相信它可以用于更改现有属性.我可能不得不走这条路,但是对于每个对象都prop 必须存在,我更愿意在逐个类的基础上设置getter.这样的事情可能吗?

另一种解决方案可能是通过某种全能方法.在其他语言中,这可以通过类似Ruby method_missing或类似PHP的方式实现__get().但据我所知,Matlab中没有(有文档或其他)模拟.


(我的用例:这个类由许多用户定义的子类继承,并且它们的所有依赖属性都以类似的方式访问,只是根据属性名称进行更改.而不是要求用户编写get.*包含对公共代码的调用的方法对于每个依赖属性,我想用包含必要元数据的匿名函数指针动态设置它们.

oop matlab dynamic-properties

5
推荐指数
1
解决办法
1477
查看次数

PHP:isset()为对象的动态属性返回false

我有一个从数据库初始化的类的层次结构.我使用__get()和__set()与公共Item基类中的数组来支持不同数量的属性.一个派生自Item的类,UserProfile用于存储用户数据.我的数据库中有一个电话号码表,与用户表有一对多的关系,可以为一个用户存储多个电话号码.如果有移动电话,则UserProfile对象具有移动字段.家庭和企业也一样.如果不存在数字,则不存在任何属性.

当我想测试这些属性的存在时,就会出现问题.当我使用代码时

if (isset($clientData->home_phone))
{
$this->startElement('phone');
$this->writeAttribute('phone_number_type','home');
$this->writeRaw($clientData->home_phone);
$this->endElement();
}
Run Code Online (Sandbox Code Playgroud)

该函数始终返回false.我尝试使用括号告诉php先获取变量,但我只是出错了.我是否需要一个特殊的attributeExists()函数来模拟isset()的功能,还是有更简单的方法?

如何在没有某种错误的情况下测试动态属性的存在?

php isset dynamic-properties

4
推荐指数
1
解决办法
1716
查看次数

Objective C - respondsToSelector用于动态属性

我目前面临的问题是检查对象(NSManagedObject)的属性是否存在.

不幸的是方法

[[MyObject class] respondsToSelector:@selector(myProperty)];
Run Code Online (Sandbox Code Playgroud)

总是返回NO.

我认为这是因为CoreData生成的属性是一个新的样式属性ala

@property (nonatomic, strong) NSString *myProperty
Run Code Online (Sandbox Code Playgroud)

那么任何想法如何解决这个问题?

我非常感谢你的所有建议;)

提前致谢!亚历克斯

objective-c ios dynamic-properties respondstoselector

4
推荐指数
1
解决办法
5621
查看次数

GDB不支持@dynamic属性?

我正在使用@dynamic属性-forwardInvocation:来在运行时生成属性(如本答案中所述).现在,当我尝试name在GDB中使用这样的属性(假设是一个动态属性)时,我总是这样:

(gdb) call (void) [myObject setName:@"foo"]
Target does not respond to this message selector.

(gdb) po [myObject name]
Target does not respond to this message selector.
Run Code Online (Sandbox Code Playgroud)

GDB中是否有开关才能使其正常工作?

xcode gdb properties objective-c dynamic-properties

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

Laravel动态属性不起作用

我正在Laravel中使用雄辩的ORM与他建立hasMany关系.

当我跑:

Level::find(1)->lessons()->get();
Run Code Online (Sandbox Code Playgroud)

它工作正常,但当我使用动态属性时:

Level::find(1)->lessons
Run Code Online (Sandbox Code Playgroud)

它只返回结果level而不是lessons.

我需要在别处设置其他设置吗?

编辑:以下是模型:

class Level extends Eloquent {

    protected $table = 'levels';

    public function lessons()
    {
        return $this->hasMany('Lesson');
    }
}

class Lesson extends Eloquent {

    protected $table = 'lessons';

    public function level()
    {
        return $this->belongsTo('Level');
    }
}
Run Code Online (Sandbox Code Playgroud)

php orm dynamic-properties laravel eloquent

3
推荐指数
2
解决办法
1921
查看次数

boost :: dynamic_properties和不可变图形对象

在使用BGL实现一些算法之后,我试图使用GraphML提供io功能.但是,我没有设法编译一个合适的运算符<<,它采用const Graph引用.

这是一个简单的例子:

// use bundled properties for vertices and edges
struct VertexProperty
{
   double error;
};

typedef boost::adjacency_list< boost::setS, boost::setS, boost::undirectedS, VertexProperty> Graph;

typedef typename boost::graph_traits<Graph>::edge_descriptor edge_descriptor;
typedef typename boost::graph_traits<Graph>::vertex_descriptor vertex_descriptor;

std::ostream& operator<<(std::ostream& os, const Graph& graph)
{
    typedef std::map<vertex_descriptor, std::size_t> IndexMap;
    IndexMap index_map;
    boost::associative_property_map<IndexMap> index_properties(index_map);

    std::size_t i = 0;
    for (const vertex_descriptor& v : boost::make_iterator_range(boost::vertices(graph)))
        index_properties[v] = i++;

    boost::dynamic_properties dp;
    typename boost::property_map<Graph, double VertexProperty::*>::const_type error_map = get(&VertexProperty::error, graph);

    dp.property("error", error_map);

    boost::write_graphml(os, graph,index_properties,dp);

    return os;
}

int main()
{ …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-graph dynamic-properties

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

嵌套的AngularJS repeat语句中的动态对象属性

我在转发器中有一个转发器,如下所示:

<div ng-repeat='x in collection1'>
    <div ng-repeat='y in collection2'>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我想要做的是访问对象x的属性y,类似于......

{{ x.{{y} }}}
Run Code Online (Sandbox Code Playgroud)

要么

{{ x[ {{y}} ] }}
Run Code Online (Sandbox Code Playgroud)

...但是当我尝试这个时,我得到一个错误......"语法错误:令牌'y'是意外的,期待[:]."

有什么方法可以用Angular做这样的事情,还是我在这里做骨头?

dynamic-properties angularjs angularjs-ng-repeat

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