在rebol中有一个对象构造函数

皮埃尔

我通常以“本能”的方式通过函数进行编程,但是我当前的问题可以通过对象轻松解决,因此我继续使用此方法。

这样做时,我试图找到一种给对象构造函数的方法,例如,相当于python中init()。

我查看了http://www.rebol.com/docs/core-fr/fr-index.html文档,但找不到任何相关内容。

皮埃尔

实际上,通过再次阅读Rebol Core文档(我只是遵循了很好的旧建议:“阅读法语手册”),还有另一种实现构造函数的方法,非常简单:

http://www.rebol.com/docs/core-fr/fr-rebolcore-10.html#section-8

当然在《英语手册》中也有:

http://www.rebol.com/docs/core23/rebolcore-10.html#section-7

=>

使用self变量的另一个示例是克隆自身的函数:

person: make object! [
    name: days-old: none
    new: func [name' birthday] [
        make self [
            name: name'
            days-old: now/date - birthday
        ]
    ]
]

lulu: person/new "Lulu Ulu" 17-May-1980

print lulu/days-old
7366

我发现这很方便,这样,构造函数就位于对象内。这一事实使对象更加自给自足。

我刚刚成功地将其应用于某些地质学方面,并且效果很好:

>> source orientation
orientation: make object! [
    matrix: []
    north_reference: "Nm"
    plane_quadrant_dip: ""
    new: func [{Constructor, builds an orientation object! based on a measurement, as given by GeolPDA device, a rotation matrix represented by a suite of 9 values} m][
        make self [
            foreach [a b c] m [append/only matrix to-block reduce [a b c]] 
            a: self/matrix/1/1 
            b: self/matrix/1/2 
            c: self/matrix/1/3 
            d: self/matrix/2/1 
            e: self/matrix/2/2 
            f: self/matrix/2/3 
            g: self/matrix/3/1 
            h: self/matrix/3/2 
            i: self/matrix/3/3 
            plane_normal_vector: reduce [matrix/1/3 
                matrix/2/3 
                matrix/3/3
            ] 
            axis_vector: reduce [self/matrix/1/2 
                self/matrix/2/2 
                self/matrix/3/2
            ] 
            plane_downdip_azimuth: azimuth_vector plane_normal_vector 
            plane_direction: plane_downdip_azimuth - 90 
            if (plane_direction < 0) [plane_direction: plane_direction - 180] 
            plane_dip: arccosine (plane_normal_vector/3) 
            case [
                ((plane_downdip_azimuth > 315) or (plane_downdip_azimuth <= 45)) [plane_quadrant_dip: "N"] 
                ((plane_downdip_azimuth > 45) and (plane_downdip_azimuth <= 135)) [plane_quadrant_dip: "E"] 
                ((plane_downdip_azimuth > 135) and (plane_downdip_azimuth <= 225)) [plane_quadrant_dip: "S"] 
                ((plane_downdip_azimuth > 225) and (plane_downdip_azimuth <= 315)) [plane_quadrant_dip: "W"]
            ] 
            line_azimuth: azimuth_vector axis_vector 
            line_plunge: 90 - (arccosine (axis_vector/3))
        ]
    ]
    repr: func [][
        print rejoin ["Matrix: " tab self/matrix 
            newline 
            "Plane: " tab 
            north_reference to-string to-integer self/plane_direction "/" to-string to-integer self/plane_dip "/" self/plane_quadrant_dip 
            newline 
            "Line: " tab 
            rejoin [north_reference to-string to-integer self/line_azimuth "/" to-string to-integer self/line_plunge]
        ]
    ]
    trace_te: func [diagram [object!]][
        len_queue_t: 0.3 
        tmp: reduce [
            plane_normal_vector/1 / (square-root (((plane_normal_vector/1 ** 2) + (plane_normal_vector/2 ** 2)))) 
            plane_normal_vector/2 / (square-root (((plane_normal_vector/1 ** 2) + (plane_normal_vector/2 ** 2))))
        ] 
        O: [0 0] 
        A: reduce [- tmp/2 
            tmp/1
        ] 
        B: reduce [tmp/2 0 - tmp/1] 
        C: reduce [tmp/1 * len_queue_t 
            tmp/2 * len_queue_t
        ] 
        L: reduce [- axis_vector/1 0 - axis_vector/2] 
        append diagram/plot [pen black] 
        diagram/trace_line A B 
        diagram/trace_line O C 
        diagram/trace_line O L
    ]
]
>> o: orientation/new [0.375471 -0.866153 -0.32985 0.669867 0.499563 -0.549286 0.640547 -0.0147148 0.767778]
>> o/repr
Matrix:     0.375471 -0.866153 -0.32985 0.669867 0.499563 -0.549286 0.640547 -0.0147148 0.767778
Plane:  Nm120/39/S
Line:   Nm299/0

这种方式的另一个优点是,“ new”方法定义的变量直接属于对象“ instance”(我遇到了麻烦,其他方法不得不提到self /有时必须初始化变量或不初始化变量)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在rebol中有一个对象构造函数

来自分类Dev

当“移动”对象在联合中有一个“非平凡”成员时,为什么强制复制构造函数?

来自分类Dev

为什么在ITypeSymbol中有静态构造函数的集合而不是一个?

来自分类Dev

在一个类中有很多构造函数是pythonic吗?

来自分类Dev

构造一个没有默认构造函数的空对象

来自分类Dev

在Java中有多少构造函数可以我们一个类中创建?

来自分类Dev

为什么一个类中有多个类构造函数,它们的可能用途是什么?

来自分类Dev

具有构造函数的另一个类中的对象数组

来自分类Dev

监视 electron.BrowserWindow 构造函数并返回一个带有 jasmine 的模拟对象

来自分类Dev

一个对象中有多个列表

来自分类Dev

为什么在C ++中有一个比率对象

来自分类Dev

一个ArrayList中有多种对象类型

来自分类Dev

通过链接构造函数实例化一个对象

来自分类Dev

一个setInterval()中有多个函数?

来自分类Dev

一个类中有多个 Equatable 函数

来自分类Dev

我在一个函数中有一个函数,如何同时退出它们呢?

来自分类Dev

C ++将具有重载构造函数的对象添加到另一个对象

来自分类Dev

在另一个构造函数中为对象数组调用构造函数

来自分类Dev

构造一个带有嵌套表的对象

来自分类Dev

构造一个带有无限参数的函数

来自分类Dev

用私有构造函数测试一个类

来自分类Dev

Qt:在一个类中有一个 QPainter 对象的实例

来自分类Dev

将类的实例传递给另一个构造函数,该构造函数将其对象添加到所传递的实例拥有的列表中

来自分类Dev

从另一个constexpr std :: array初始化没有默认构造函数的对象的std :: array

来自分类Dev

不确定如何使用另一个类的对象创建带有参数的构造函数

来自分类Dev

C ++-如何在另一个类中使用私有构造函数实例化对象

来自分类Dev

期望对象数组但在对象中有一个对象

来自分类Dev

如何制作一个与原始构造函数(包括所有节点信息)重复的构造函数?

来自分类Dev

类缺少没有参数的构造函数 - 但我提供了一个构造函数

Related 相关文章

  1. 1

    在rebol中有一个对象构造函数

  2. 2

    当“移动”对象在联合中有一个“非平凡”成员时,为什么强制复制构造函数?

  3. 3

    为什么在ITypeSymbol中有静态构造函数的集合而不是一个?

  4. 4

    在一个类中有很多构造函数是pythonic吗?

  5. 5

    构造一个没有默认构造函数的空对象

  6. 6

    在Java中有多少构造函数可以我们一个类中创建?

  7. 7

    为什么一个类中有多个类构造函数,它们的可能用途是什么?

  8. 8

    具有构造函数的另一个类中的对象数组

  9. 9

    监视 electron.BrowserWindow 构造函数并返回一个带有 jasmine 的模拟对象

  10. 10

    一个对象中有多个列表

  11. 11

    为什么在C ++中有一个比率对象

  12. 12

    一个ArrayList中有多种对象类型

  13. 13

    通过链接构造函数实例化一个对象

  14. 14

    一个setInterval()中有多个函数?

  15. 15

    一个类中有多个 Equatable 函数

  16. 16

    我在一个函数中有一个函数,如何同时退出它们呢?

  17. 17

    C ++将具有重载构造函数的对象添加到另一个对象

  18. 18

    在另一个构造函数中为对象数组调用构造函数

  19. 19

    构造一个带有嵌套表的对象

  20. 20

    构造一个带有无限参数的函数

  21. 21

    用私有构造函数测试一个类

  22. 22

    Qt:在一个类中有一个 QPainter 对象的实例

  23. 23

    将类的实例传递给另一个构造函数,该构造函数将其对象添加到所传递的实例拥有的列表中

  24. 24

    从另一个constexpr std :: array初始化没有默认构造函数的对象的std :: array

  25. 25

    不确定如何使用另一个类的对象创建带有参数的构造函数

  26. 26

    C ++-如何在另一个类中使用私有构造函数实例化对象

  27. 27

    期望对象数组但在对象中有一个对象

  28. 28

    如何制作一个与原始构造函数(包括所有节点信息)重复的构造函数?

  29. 29

    类缺少没有参数的构造函数 - 但我提供了一个构造函数

热门标签

归档