rb_ivar_set()
/* write val in the id instance of obj */
984 VALUE
985 rb_ivar_set(obj, id, val)
986 VALUE obj;
987 ID id;
988 VALUE val;
989 {
990 if (!OBJ_TAINTED(obj) && rb_safe_level() >= 4)
991 rb_raise(rb_eSecurityError,
"Insecure: can't modify instance variable");
992 if (OBJ_FROZEN(obj)) rb_error_frozen("object");
993 switch (TYPE(obj)) {
994 case T_OBJECT:
995 case T_CLASS:
996 case T_MODULE:
997 if (!ROBJECT(obj)->iv_tbl)
ROBJECT(obj)->iv_tbl = st_init_numtable();
998 st_insert(ROBJECT(obj)->iv_tbl, id, val);
999 break;
1000 default:
1001 generic_ivar_set(obj, id, val);
1002 break;
1003 }
1004 return val;
1005 }
(variable.c)
static void
generic_ivar_set(obj, id, val)
VALUE obj;
ID id;
VALUE val;
{
st_table *tbl;
if (rb_special_const_p(obj)) {
special_generic_ivar = 1;
}
if (!generic_iv_tbl) {
generic_iv_tbl = st_init_numtable();
}
if (!st_lookup(generic_iv_tbl, obj, &tbl)) {
FL_SET(obj, FL_EXIVAR);
tbl = st_init_numtable();
st_add_direct(generic_iv_tbl, obj, tbl);
st_add_direct(tbl, id, val);
return;
}
st_insert(tbl, id, val);
}
#define SPECIAL_CONST_P(x) (IMMEDIATE_P(x) || !RTEST(x))
#define FL_ABLE(x) (!SPECIAL_CONST_P(x))
#define FL_TEST(x,f) (FL_ABLE(x)?(RBASIC(x)->flags&(f)):0)
#define FL_SET(x,f) do {if (FL_ABLE(x)) RBASIC(x)->flags |= (f);} while (0)
#define IMMEDIATE_MASK 0x03
#define IMMEDIATE_P(x) ((VALUE)(x) & IMMEDIATE_MASK)
分享到:
相关推荐
《深入理解iVAR_HTF:MetaTrader 5脚本解析》 在金融交易领域,MetaTrader 5(MT5)是一款广泛使用的交易平台,它提供了丰富的技术分析工具和自动化交易功能。"iVAR_HTF - MetaTrader 5脚本.zip" 是一个包含两个...
`Runtime` 提供了几个函数来操作`Ivar`,例如`ivar_getName()`、`ivar_getTypeEncoding()`和`ivar_getOffset()`等。这些函数可以帮助开发者在运行时获取类的实例变量信息。 1. **ivar_getName()**: 这个函数用于...
ivar_getName // 获取成员变量类型编码 ivar_getTypeEncoding // 获取指定名称的成员变量 class_getInstanceVariable // 获取某个对象成员变量的值 object_getIvar // 设置某个对象成员变量的值 object_setIvar ...
Ivar Jacobson是软件工程领域中的重量级人物,他与Grady Booch和Jim Rumbaugh一同被认为是统一建模语言(UML)的共同创始人。而在演讲中提到的“精益思想的复兴”这一概念,无疑体现了他在现代软件开发实践中的持续...
一旦有了属性或实例变量的指针,可以通过`property_getName`和`ivar_getName`来获取其名称,通过`property_getAttributes`获取属性的属性字符串,如`T@"NSString",C,R,`,并用`property_attributes_t`解析这些属性...
《终极期望之:Ivar Jacobson 的软件工程传世经典》这一主题,聚焦于软件工程领域的一位重量级人物——Ivar Jacobson及其对软件开发的深远贡献。Ivar Jacobson,被誉为“Use Case(用例)之父”,他的工作与理论在...
2008上海英雄会 Ivar 演讲PPT下载(Smart)
在`Model`类的示例中,我们可以通过`class_copyIvarList`获取所有成员变量,并用`ivar_getName`和`ivar_getTypeEncoding`打印出它们的名称和类型。这在调试或元数据处理时非常有用。在上述代码中,可以看到`_str1`...
- `- (void)setName1:(NSString *)name1`:`setter`方法,用于设置`name1`的值。 - `- (NSString *)name1`:`getter`方法,用于获取`name1`的值。 在`@implementation`部分,我们可以使用`@synthesize`来自动创建`...
感谢使用2.0更新数据库类别名,从默认的_ivar名改为属性名:_name-> name数据库操作对象获取重新连接池:[JRDBMgr defaultDB]-> [JRDBMgr shareInstance] .getHandler抛弃缓存功能加上和,或查询语句描述...
本文将详细探讨如何在iOS的导航栏上实现多按钮布局,以及由此引发的ivar(实例变量)管理问题。 首先,我们要知道,在原生的UINavigationController中,导航栏默认只支持左右两个BarButtonItem,即“返回”按钮和一...
逐浪CMS应邀参加CSDN中国软件英雄会上海站活动,现场与敏捷开发创始人Ivar Jacobson、Google研究院副院长张智威等人对话,赢得了诸多专家与业内人士认可。同时,Zoomla!逐浪CMS将导入敏捷开发,以中国第一敏捷应用...
"ivar产品经理培训教材"是一份全面的学习资源,旨在帮助学员掌握产品经理的核心技能,特别是在需求管理和用例分析方面。 首先,我们来看看这个培训教材的结构。通过压缩包中的文件名称列表,我们可以看到教材分为七...
《ncov-utils:ivar管道处理ncov19样本的实用工具》 在当前全球公共卫生事件中,新型冠状病毒(SARS-CoV-2)的研究成为重要焦点。为了更好地理解和应对这种病毒,科学家们需要对大量的病毒样本进行基因组学分析。...