我想知道一个类(或对象)的生命周期是什么,我的意思是,当它进入内存并活着回答消息直到最终从内存中删除时。
我的假设是:
好的,所以一个对象从它的实例化开始一直活着,直到垃圾收集杀死它或者你向它发送一条销毁消息(或者它的类)
但是,您如何实例化一个类以使其活跃?您不能向某种元类发送 NEW 消息(如果是,那么实例化元类的元元类是什么?)那么,默认情况下类是活动的吗?加载图像时,smalltalk 库中的每个类都会加载到内存中吗?真的有很多类随时都在内存中吗?如果是这样,我如何才能在特定时刻查看内存中的类和对象?
问题是解析一个通过加载/标记获得的html流,你可以获得html标签组成部分,即当你找到
<div id="one">my text</div>
Run Code Online (Sandbox Code Playgroud)
你应该在同一个容器中以<div id ="one">,{my text}和</ div>之类的东西结尾,类似于
[<div id="one"> {my text} </div>]
Run Code Online (Sandbox Code Playgroud)
甚至更好
[<div> [id {one}] {my text} </div>]
Run Code Online (Sandbox Code Playgroud)
解析问题是匹配成对的html标签,在html中,标签可能是一个空标签,可能属性但没有内容,因此没有结束标签或普通标签可能带有属性和内容,因此是结束标签,但两种类型的标签只是一个标签
我的意思是当你找到一个像<p>一些单词的序列</ p>你有一个P标签时,你会得到一个像<p />这样的序列只是一个P标签,在第一种情况下你有关联的文字和结束标签在后者你没有,这就是全部
换句话说,html属性和内容是html中tag元素的属性,所以在json中表示这一点你会得到像:
tag: { name: "div" attributes: { id: "one } content: "my text" }
Run Code Online (Sandbox Code Playgroud)
这意味着你必须识别标签的内容,以便将其分配给正确的标签,就rebol解析而言,这意味着标识匹配的标签(打开标签和结束标签)
在rebol中,您可以轻松解析html序列,如:
<div id="yo">yeah!</div><br/>
Run Code Online (Sandbox Code Playgroud)
规则:
[ some [ tag! string! tag! | tag! ]]
Run Code Online (Sandbox Code Playgroud)
但是使用此规则,您将匹配html
<div id="yo">yeah!</div><br/>
Run Code Online (Sandbox Code Playgroud)
并且
<div id="yo">yeah!</p><br/>
Run Code Online (Sandbox Code Playgroud)
同样的
所以你需要一种方法来匹配相同的开始标记出现在结束位置
遗憾的是,rebol标签不能(AFAIK)使用标签名称进行参数化,所以你不能说:
[ some [ set t1 tag! set s string! set t2 tag!#t1/1 | tag! ] ]
Run Code Online (Sandbox Code Playgroud)
t1/1表示法归因于rebol的(坏)特征,包括标记名称相同级别的所有标记属性(另一个不良特征是不将匹配标记重新识别为相同的标记)
当然,您可以使用以下代码实现目标: …
我的第一个假设是对象和上下文是同义词.所以我创建了一个对象o和一个上下文c.探测它们会报告相同的代码构造,并且类型也是相同的(都是类型对象!):
>> o: make object! [a: 1 b: 2]
>> c: context [a: 1 b: 2]
>> probe o
make object! [
a: 1
b: 2
]
>> probe c
make object! [
a: 1
b: 2
]
>> type? o
== object!
>> type? c
== object!
Run Code Online (Sandbox Code Playgroud)
...但是在测试平等时,你得到:
>> equal? o c
== false
Run Code Online (Sandbox Code Playgroud)
所以很明显它们不是同义词.如果他们探测完全相同,为什么不呢?
我已经在内部读取R2存储上下文作为两个表,一个用于单词,另一个用于值,因此您可以要求它们:
o: context [a: 1 b: 2]
>> first o
== [self a b]
>> second o
== [make object! [
a: 1
b: 2
] 1 2]
Run Code Online (Sandbox Code Playgroud)
以任何方式...
>> pick o 1
== [self a b]
>> pick o 2
== [make object! [
a: 1
b: 2
] 1 2]
Run Code Online (Sandbox Code Playgroud)
但是有第三个"表格"(一个块)似乎没有记录,而且这个只能使用第三个功能访问
>> third o
== [a: 1 b: 2]
>> pick o 3
** Script Error: Out of range or past end
** Near: pick o 3
Run Code Online (Sandbox Code Playgroud)
什么应该是第三块? …
似乎REBOL/View 2.7.8.3.1有一个出现在Windows 8中的错误(或者可能是Windows 8有一个错误).
在磁盘C的根分区中创建文件时:它在Windows资源管理器,Windows命令行以及访问C:\文件夹的任何Windows程序中都不可见,该文件位于Windows的另一个Universe中.
>> save %/c/a.txt "hello universe!"
C:\> dir
(no clue about a.txt)
Run Code Online (Sandbox Code Playgroud)
但是如果你在Rebol/View控制台中进行目录列表,它就在那里!你可以读它,加载它甚至删除它
>> ls %/c/
$Recycle.Bin/ a.txt Users/ Windows/
Run Code Online (Sandbox Code Playgroud)
这个奇怪的错误的结果是你无法打开任何使用任何Windows程序从Rebol/View 2.7创建的文件,在Rebol中创建的文件只对Rebol可见.但这只发生在根文件夹中创建的文件,如果你在任何其他文件夹中创建文件似乎都没问题.
>> save %/c/aeat/b.txt "hello universe"
>> ls %/c/aeat
b.txt
Run Code Online (Sandbox Code Playgroud)
并且
c:\aeat> dir
13/04/2015 00:24 <DIR> .
13/04/2015 00:24 <DIR> ..
13/04/2015 00:24 16 b.txt
Run Code Online (Sandbox Code Playgroud) 这个问题是关于动态地将代码添加到rebol 2中的上下文或对象,它与问题有关.在REBOL中动态地将单词添加到上下文但它不是同一种类.
如果我想使用代码块动态地将代码添加到rebol对象,我会因为奇怪的行为而遇到麻烦:
>> append third o [c: 3]
== [a: 1 b: 2 c: 3]
Run Code Online (Sandbox Code Playgroud)
但...
>> first o
== [self a b]
>> second o
== [make object! [
a: 1
b: 2
] 1 2]
>> third o
== [a: 1 b: 2]
Run Code Online (Sandbox Code Playgroud)
附件丢失了!如果附加到first o或,则相同second o
使用"common"块不会发生这种情况:
>> m: [a [b] c]
== [a [b] c]
>> append m 3
== [a [b] c 3]
>> m
== [a [b] c 3] …Run Code Online (Sandbox Code Playgroud) 在不同的 C 标准中应该打印什么 C 代码?
struct X { int a; char b[4]; };
struct X x, y; struct X *px;
printf("%x %x\n", x, &x); // what mean x in this context? suppose we get 0x12b45 and 0x34235
printf("%d\n", x == 0x12b45 ? 1 : 0)
px = &x;
x = *px;
printf("%x %x\n", x, *px);
x = y
printf("%x %x\n", x, y);
Run Code Online (Sandbox Code Playgroud)
换句话说,结构体的价值是什么?或者更好地说,结构解析为什么值?使用数组进行类比,数组名称解析为第一个数组项的值,什么值解析为结构名称?
int a[3];
printf("%x %x\n", a, a[0]); // prints the same value twice
struct s { int a; …Run Code Online (Sandbox Code Playgroud)