class 为精灵建造
class construct for genie
代码将输出
1
2
2
1只打印一次。不知道精灵怎么写。
下面是vala代码:
public static void main() {
var a = new One();
var b = new One();
}
class One : Object {
class construct {
stdout.puts("1\n");
}
public One () {
stdout.puts("2\n");
}
}
精灵的等效代码class构造方法是什么?
如果精灵的初始化? (现在)它与 vala 的 class 构造不同?
精灵的初始化
以下不可用!
init
var a = new One
var b = new One
class One
construct ()
stdout.puts("2\n")
init
stdout.puts("1\n")
construct block require GLib.object
construct block => init block
但是 Vala 的 class 结构 没有。
所以 vala 会起作用,但 Genie 不会,
验证码:
class One {
class construct {
stdout.puts("1\n");
}
public One () {
stdout.puts("2\n");
}
}
为什么这个功能有用?
其实我以前从没用过class。
但是我觉得很有用,很有用。
示例:初始化一些静态文件(或 class 字段:另一个问题)。
不知道为什么?为什么 Vala 实现这个功能?
Vala实现的话一定有用
根据我从文档中可以看出的内容,我认为它是 init
。虽然我不确定你为什么要使用它。它可能对在 class 的所有实例中使用的一些静态数据的延迟加载很有用,但我自己从未这样做过。
在面向对象编程术语中,当 class 作为对象创建时,它是 "instantiated"。可以使用 "constructor" 自定义实例化过程。在 Vala 和 Genie 中,也可以在不再需要某个对象时使用 "destructor".
自定义流程
如果方法不作用于对象中的数据,则称为 static
方法。根据定义,构造函数不作用于对象中的数据,而是 returns 一个新对象。所以构造函数总是静态的, static construct
是错误的名字。在 Vala 中有 class construct
,如果您更改代码以使用它,您会得到相同的结果。请参阅 以了解 Vala 中对此主题的彻底处理。关于class construct
的部分在最后。
我的理解是 Genie 的 init
相当于 Vala 的 class construct
。我认为您的问题揭示了 Genie 中的一个问题。我的理解是这段代码可以回答您的问题:
[indent = 4]
init
var a = new One()
var b = new One()
var c = new One.alternative_constructor()
class One:Object
init
print "Class 'One' is registered with GType"
construct()
print "Object of type 'One' created"
construct alternative_constructor()
print """Obect of type 'One' created with named constructor
'alternative_constructor', but the design of your
class is probably too complex if it has multiple
constructors."""
def One()
print "This is not a constructor"
final
print "Object of type 'One' destroyed"
但是,这会输出:
Class 'One' is registered with GType
Object of type 'One' created
Class 'One' is registered with GType
Object of type 'One' created
Class 'One' is registered with GType
Obect of type 'One' created with named constructor
'alternative_constructor', but the design of your
class is probably too complex if it has multiple
constructors.
Object of type 'One' destroyed
Object of type 'One' destroyed
Object of type 'One' destroyed
而 GType 注册只发生一次,因此 init
代码被放在错误的位置并且在每次实例化时被调用而不是类型注册。所以目前我认为精灵中没有Vala的class construct
等价物。
改变 init
的行为可能是一种解决方案,但我可能误解了它的最初目的,现在可能有很多代码依赖于它的当前行为。另一种解决方案是为实现此功能的 Genie 解析器编写补丁。您需要充分说明为什么此功能有用。
代码将输出
1
2
2
1只打印一次。不知道精灵怎么写。
下面是vala代码:
public static void main() {
var a = new One();
var b = new One();
}
class One : Object {
class construct {
stdout.puts("1\n");
}
public One () {
stdout.puts("2\n");
}
}
精灵的等效代码class构造方法是什么?
如果精灵的初始化? (现在)它与 vala 的 class 构造不同?
精灵的初始化
以下不可用!
init
var a = new One
var b = new One
class One
construct ()
stdout.puts("2\n")
init
stdout.puts("1\n")
construct block require GLib.object
construct block => init block
但是 Vala 的 class 结构 没有。
所以 vala 会起作用,但 Genie 不会,
验证码:
class One {
class construct {
stdout.puts("1\n");
}
public One () {
stdout.puts("2\n");
}
}
为什么这个功能有用? 其实我以前从没用过class。 但是我觉得很有用,很有用。
示例:初始化一些静态文件(或 class 字段:另一个问题)。
不知道为什么?为什么 Vala 实现这个功能? Vala实现的话一定有用
根据我从文档中可以看出的内容,我认为它是 init
。虽然我不确定你为什么要使用它。它可能对在 class 的所有实例中使用的一些静态数据的延迟加载很有用,但我自己从未这样做过。
在面向对象编程术语中,当 class 作为对象创建时,它是 "instantiated"。可以使用 "constructor" 自定义实例化过程。在 Vala 和 Genie 中,也可以在不再需要某个对象时使用 "destructor".
自定义流程如果方法不作用于对象中的数据,则称为 static
方法。根据定义,构造函数不作用于对象中的数据,而是 returns 一个新对象。所以构造函数总是静态的, static construct
是错误的名字。在 Vala 中有 class construct
,如果您更改代码以使用它,您会得到相同的结果。请参阅 class construct
的部分在最后。
我的理解是 Genie 的 init
相当于 Vala 的 class construct
。我认为您的问题揭示了 Genie 中的一个问题。我的理解是这段代码可以回答您的问题:
[indent = 4]
init
var a = new One()
var b = new One()
var c = new One.alternative_constructor()
class One:Object
init
print "Class 'One' is registered with GType"
construct()
print "Object of type 'One' created"
construct alternative_constructor()
print """Obect of type 'One' created with named constructor
'alternative_constructor', but the design of your
class is probably too complex if it has multiple
constructors."""
def One()
print "This is not a constructor"
final
print "Object of type 'One' destroyed"
但是,这会输出:
Class 'One' is registered with GType
Object of type 'One' created
Class 'One' is registered with GType
Object of type 'One' created
Class 'One' is registered with GType
Obect of type 'One' created with named constructor
'alternative_constructor', but the design of your
class is probably too complex if it has multiple
constructors.
Object of type 'One' destroyed
Object of type 'One' destroyed
Object of type 'One' destroyed
而 GType 注册只发生一次,因此 init
代码被放在错误的位置并且在每次实例化时被调用而不是类型注册。所以目前我认为精灵中没有Vala的class construct
等价物。
改变 init
的行为可能是一种解决方案,但我可能误解了它的最初目的,现在可能有很多代码依赖于它的当前行为。另一种解决方案是为实现此功能的 Genie 解析器编写补丁。您需要充分说明为什么此功能有用。