小编pep*_*pep的帖子

Smalltalk 类的生命周期是什么?

我想知道一个类(或对象)的生命周期是什么,我的意思是,当它进入内存并活着回答消息直到最终从内存中删除时。

我的假设是:

  • 由于您向对象和类发送消息,因此它们必须活着并在内存中才能回答它们
  • 当您通过向其类发送“新”消息来实例化它时,您使一个对象处于活动状态(从而进入内存并收听消息)

好的,所以一个对象从它的实例化开始一直活着,直到垃圾收集杀死它或者你向它发送一条销毁消息(或者它的类)

但是,您如何实例化一个类以使其活跃?您不能向某种元类发送 NEW 消息(如果是,那么实例化元类的元元类是什么?)那么,默认情况下类是活动的吗?加载图像时,smalltalk 库中的每个类都会加载到内存中吗?真的有很多类随时都在内存中吗?如果是这样,我如何才能在特定时刻查看内存中的类和对象?

smalltalk

8
推荐指数
2
解决办法
149
查看次数

如何正确解析配对的html标签?

问题是解析一个通过加载/标记获得的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的(坏)特征,包括标记名称相同级别的所有标记属性(另一个不良特征是不将匹配标记重新识别为相同的标记)

当然,您可以使用以下代码实现目标: …

rebol rebol3

6
推荐指数
1
解决办法
284
查看次数

在Rebol2中是OBJECT和CONTEXT的同义词吗?

我的第一个假设是对象和上下文是同义词.所以我创建了一个对象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)

所以很明显它们不是同义词.如果他们探测完全相同,为什么不呢?

equality rebol object rebol2

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

在Rebol2中你从THIRD获得的对象/函数的未记录块是什么?

我已经在内部读取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)

什么应该是第三块? …

function rebol object rebol2

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

Rebol 2有一个在Windows 8中创建文件的错误

似乎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)

file rebol windows-8

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

为什么动态添加代码对象在Rebol2中生效?

这个问题是关于动态地将代码添加到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)

rebol append block object rebol2

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

不同 C 标准中的结构体值

在不同的 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)

c struct

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

标签 统计

rebol ×5

object ×3

rebol2 ×3

append ×1

block ×1

c ×1

equality ×1

file ×1

function ×1

rebol3 ×1

smalltalk ×1

struct ×1

windows-8 ×1