Kotlin/Native中的${type}Var是什么?
当它试图说明什么是Kotlin/Native中的${type}Var是什么?,kotlin,kotlin-native,Kotlin,Kotlin Native,当它试图说明什么是${type}Var时,我非常不清楚 …对于Kotlin枚举,它被命名为${type}Var 哇?!什么是Kotlin枚举?常规Kotlin枚举 enum class MyEnum { FIRST, SECOND } 我不认为这意味着什么 好的,让我们看一下本文档中的示例: struct S*映射到CPointer,int8\u t*映射到CPointer 好了,清楚了 char**映射到CPointer 为什么char**映射到CPointer而不是CPointer
${type}Var
时,我非常不清楚
…对于Kotlin枚举,它被命名为${type}Var
哇?!什么是Kotlin枚举?常规Kotlin枚举
enum class MyEnum {
FIRST, SECOND
}
我不认为这意味着什么
好的,让我们看一下本文档中的示例:
struct S*
映射到CPointer
,int8\u t*
映射到CPointer
好了,清楚了
char**
映射到CPointer
为什么char**
映射到CPointer
而不是CPointer
所以最后的问题是:什么是
IntVar
,LongVar
,CPointerVar
以及其他类似${type}Var
?你应该仔细阅读整段内容
所有受支持的C类型在Kotlin中都有相应的表示:
- 枚举可以映射到Kotlin枚举
<>也有C值和值(C++中的等价值是
Var
到类型末尾。唯一的例外是
对于结构(以及从typedefs到structs),此表示是主要的,并且与结构本身具有相同的名称
现在让我们回到枚举。常规Kotlin枚举映射到常规C枚举。所以实际上FIRST
和SECOND
两种语言都有typeMyEnum
。但是,如果要创建一个包含MyEnum
的变量,例如:
// This is C Code
MyEnum a = FIRST;
< >代码> A<代码> MyEnum中的类型<代码> > Kotlin >代码,但它是LValk(C++中的代码< MyNeNUM和代码>),所以在< <代码> < <代码>中,将有类型<代码> MyEnumVar <代码>,因为这正是文档中所说的:<代码> ${Type } Var < /C> >,其中代码> ${Type }=MyEnum struct S*
应该是CPointer
,但是请记住struct
S是例外,我们不应该添加Var
,所以这只是CPointer
是int8\u t*
-这里没有例外CPointer
是char*
——同样没有例外(只有左值类型,结构除外)CPointer
是char**
,因为我们需要CPointer
的左值,这正是CPointer
CPointerVar
IntVar
,LongVar
,CPointerVar
和其他东西都是int
,long
,CPointer
类型的左值。如果要更改函数中的对象,可能需要这样做。类似于Java中的Ref
什么是IntVar
,LongVar
,CPointerVar
和其他类似${type}Var
的东西
这是你引用的句子的开头和结尾:
表示此类型左值的Kotlin类型,即位于内存中的值,而不是简单的不可变自包含值
“位于内存中”意味着您可以获取它们的地址(使用C或Kotlin中的&
运算符)
哇?!什么是Kotlin枚举?常规Kotlin枚举
enum class MyEnum {
FIRST, SECOND
}
是的,所以当Kotlin/Native看到MyEnum
时,它也会生成MyEnumVar
为什么char**
映射到CPointer
而不是CPointer
CPointer
是非法的:,Byte
和CPointer
不合法。他们需要扩展CPointed的原因是因为取消对指针的引用会给出一个左值:某个有地址的东西
有关C(和C++)中左值的更多信息,请参见或。您断章取义地引用了全文:“对于structs(和typedefs to structs),此表示是主要的,并且与结构本身具有相同的名称,对于Kotlin枚举,它被命名为${type}Var,对于CPointer,它是CPointerVar,对于大多数其他类型,它是${type}Var。”是的,它讲的是普通的kotkin酶。不,Byte不是枚举,但大多数其他类型也遵循${type}Var模式。“主要区别在于左值可以设置为某个值,而右值在初始化后不能更改。”我不会这么说,因为
x
inconst int x=0
中的x
在很大程度上仍然是左值。