从构造函数 it 块中的成员函数访问 Fantom class' 成员?
Accessing Fantom class' members from a member function in a constructor it-block?
如果我定义这个Fantom class
const class Mixed
{
const Int whole
const Int numerator
const Int denominator
const | -> Int[]| convertToFrac
new make( |This| func ) { func( this ) }
}
我想创建一个定义 convertToFrac 函数的实例,如下所示:
class Example
{
Void main( Str args )
{
mixed := Mixed {
whole = 2
numerator = 3
denominator = 8
convertToFrac = |->Int[]| {
return [ whole * denominator + numerator, denominator ]
}
}
}
}
编译器抱怨说:
Unknown variable 'numerator'
Unknown variable 'denominator'
Unknown variable 'whole'
是否有任何方法可以引用从函数 "convertToFrac" 中创建的对象 "mixed",也被定义,而不将 "mixed" 对象作为函数的参数传递?
如果我在每个变量前加上 "mixed",就像这样:
return [ mixed.whole * mixed.denominator + mixed.numerator, mixed.denominator ]
编译器抱怨:Unknown variable 'mixed'
。
使用 this.whole
没有意义,因为它指的是示例 class。
使用 it.whole
也没有意义,因为它指的是函数。
任何人都可以建议从 "convertToFrac" 函数中访问 "mixed" 对象的方法吗?
正如您正确评估的那样,问题是您在 it-block
中使用了 it-block
,并且因为您使用的是隐式 it
(即您没有任何 it
限定符)对于所引用的内容存在混淆。
我将详细写出 it
限定符,以便您了解发生了什么:
mixed := Mixed {
// 'it' is the Mixed instance
it.whole = 2
it.numerator = 3
it.denominator = 8
it.convertToFrac = |->Int[]| {
// 'it' is now the func param
// 'it.whole' doesn't exist, because there is no func param
return [ it.whole * it.denominator + it.numerator, it.denominator ]
}
}
您使用 mixed
变量限定符的想法很好,但不幸的是,在处理 ctor 时,mixed
变量尚未创建,因此无法引用。
但是你可以在it-block中创建你自己的mixed
变量,下面的编译运行非常愉快:
mixed := Mixed {
// 'mixed' doesn't exist here yet, because we're still creating a value to assign to it
it.whole = 2
it.numerator = 3
it.denominator = 8
// assign `it` to our own `mixed` variable
mixed := it
it.convertToFrac = |->Int[]| {
// use our own `mixed` variable
return [ mixed.whole * mixed.denominator + mixed.numerator, mixed.denominator ]
}
}
如果我定义这个Fantom class
const class Mixed
{
const Int whole
const Int numerator
const Int denominator
const | -> Int[]| convertToFrac
new make( |This| func ) { func( this ) }
}
我想创建一个定义 convertToFrac 函数的实例,如下所示:
class Example
{
Void main( Str args )
{
mixed := Mixed {
whole = 2
numerator = 3
denominator = 8
convertToFrac = |->Int[]| {
return [ whole * denominator + numerator, denominator ]
}
}
}
}
编译器抱怨说:
Unknown variable 'numerator'
Unknown variable 'denominator'
Unknown variable 'whole'
是否有任何方法可以引用从函数 "convertToFrac" 中创建的对象 "mixed",也被定义,而不将 "mixed" 对象作为函数的参数传递?
如果我在每个变量前加上 "mixed",就像这样:
return [ mixed.whole * mixed.denominator + mixed.numerator, mixed.denominator ]
编译器抱怨:Unknown variable 'mixed'
。
使用 this.whole
没有意义,因为它指的是示例 class。
使用 it.whole
也没有意义,因为它指的是函数。
任何人都可以建议从 "convertToFrac" 函数中访问 "mixed" 对象的方法吗?
正如您正确评估的那样,问题是您在 it-block
中使用了 it-block
,并且因为您使用的是隐式 it
(即您没有任何 it
限定符)对于所引用的内容存在混淆。
我将详细写出 it
限定符,以便您了解发生了什么:
mixed := Mixed {
// 'it' is the Mixed instance
it.whole = 2
it.numerator = 3
it.denominator = 8
it.convertToFrac = |->Int[]| {
// 'it' is now the func param
// 'it.whole' doesn't exist, because there is no func param
return [ it.whole * it.denominator + it.numerator, it.denominator ]
}
}
您使用 mixed
变量限定符的想法很好,但不幸的是,在处理 ctor 时,mixed
变量尚未创建,因此无法引用。
但是你可以在it-block中创建你自己的mixed
变量,下面的编译运行非常愉快:
mixed := Mixed {
// 'mixed' doesn't exist here yet, because we're still creating a value to assign to it
it.whole = 2
it.numerator = 3
it.denominator = 8
// assign `it` to our own `mixed` variable
mixed := it
it.convertToFrac = |->Int[]| {
// use our own `mixed` variable
return [ mixed.whole * mixed.denominator + mixed.numerator, mixed.denominator ]
}
}