Kotlin의 stdlib에 대한generated
12278 단어 Kotlin
stdlib, 확장 함수 및 집합
Kotlin의 stdlib는 거의 확장 함수의 집합이지만 Java는 기본형이 있어 형식 매개 변수로 처리할 수 없기 때문에 집합에 확장 함수를 쓰려면 다음과 같이 하십시오. 형식 매개 변수,byte,short,int,long,float,double,booleanchar에 유사한 코드를 반복해서 써야 합니다./**
* Returns `true` if the array is empty.
*/
@kotlin.internal.InlineOnly
public inline fun <T> Array<out T>.isEmpty(): Boolean {
return size == 0
}
/**
* Returns `true` if the array is empty.
*/
@kotlin.internal.InlineOnly
public inline fun ByteArray.isEmpty(): Boolean {
return size == 0
}
/**
* Returns `true` if the array is empty.
*/
@kotlin.internal.InlineOnly
public inline fun ShortArray.isEmpty(): Boolean {
return size == 0
}
/**
* Returns `true` if the array is empty.
*/
@kotlin.internal.InlineOnly
public inline fun IntArray.isEmpty(): Boolean {
return size == 0
}
/**
* Returns `true` if the array is empty.
*/
@kotlin.internal.InlineOnly
public inline fun LongArray.isEmpty(): Boolean {
return size == 0
}
/**
* Returns `true` if the array is empty.
*/
@kotlin.internal.InlineOnly
public inline fun FloatArray.isEmpty(): Boolean {
return size == 0
}
/**
* Returns `true` if the array is empty.
*/
@kotlin.internal.InlineOnly
public inline fun DoubleArray.isEmpty(): Boolean {
return size == 0
}
/**
* Returns `true` if the array is empty.
*/
@kotlin.internal.InlineOnly
public inline fun BooleanArray.isEmpty(): Boolean {
return size == 0
}
/**
* Returns `true` if the array is empty.
*/
@kotlin.internal.InlineOnly
public inline fun CharArray.isEmpty(): Boolean {
return size == 0
}
stdlib 코드 생성
따라서 Kotlin의 stdlib는 템플릿에서 집합에 사용되는 확장 함수 코드를 생성하고 생성된 코드는 libraries/stdlib/src/genereted/
에 놓는다.
예를 들어 위의 isEmpty
템플릿은 libraries/tools/kotlin-stdlib-gen/src/templates/Arrays.kt
에서 다음과 같이 정의됩니다.templates add f("isEmpty()") {
inline(Inline.Only)
only(ArraysOfObjects, ArraysOfPrimitives)
doc { "Returns `true` if the array is empty." }
returns("Boolean")
body {
"return size == 0"
}
}
그것은 보기에 약간 스케줄 키 같지만, f
의 정의를 보면fun f(signature: String, init: GenericFunction.() -> Unit) = GenericFunction(signature).apply(init)
, 블록의 수신기는 GenericFunction
, 이 종류는 방법의 생성기입니다.
템플릿에서 코드를 생성하려면 다음 명령을 수행합니다.$ cd libraries/tools/kotlin-stdlib-gen
$ mvn compile exec:java
현재libraries/stdlib/src/generated/Arrays.kt
생성isEmpty
.
확장 함수를 stdlib 집합에 추가
실제로 peek
디버깅을 위해 목록의 내용을 엿보는 방법을 추가해 보았다.listOf(1, 2, 3)
.map { ... }
.peek { println(it) } //=> 1, 2, 3
.map { ... }
생성기 방법의 일부분을 소개하다.
name
what
inline
생성 방법이 내연인지 여부를 지정합니다
typeParam
유형 매개변수 지정하기
only
확장 함수를 정의할 컬렉션 지정(Family)
returns
반환 값 유형 지정
body
방법의 내용은 여기에 적혀 있습니다.
잡목peek
의 실현은 다음과 같다.templates add f("peek(action: (T) -> Unit)") {
inline(true)
only(Lists)
typeParam("T")
returns("List<T>")
body {
"""
for (item in this)
action.invoke(item)
return this
"""
}
}
템플릿의 정의는 자기법이고 취미가 있기 때문에 먼저 generated
실현하고 싶은 방법을 쓰고 이동한 후에 템플릿으로 옮기는 것이 좋다.
쓴 후에 구축하고 실행해 보세요.$ mvn compile exec:java
$ ant runtime
$ dist/kotlinc/bin/kotlinc
Type :help for help, :quit for quit
>>> listOf(1,2,3).peek { println(it) }
1
2
3
[1, 2, 3]
가족 정보 Family
어떤 종류를 생성하는지에 대응한다.templates
의only
에서 지정Family
.기본값은 다음과 같이 모든 Family에서 생성됩니다.
Family
packageName
SourceFile
Iterables
"kotlin.collections"
Collections
Collections
"kotlin.collections"
Collections
Lists
"kotlin.collections"
Collections
Sets
"kotlin.collections"
Sets
Maps
"kotlin.collections"
Maps
InvariantArraysOfObjects
"kotlin.collections"
Arrays
ArraysOfObjects
"kotlin.collections"
Arrays
ArraysOfPrimitives
"kotlin.collections"
Arrays
Sequences
"kotlin.sequences"
Sequences
CharSequences
"kotlin.text"
Strings
Strings
"kotlin.text"
Strings
Ranges
"kotlin.ranges"
Ranges
RangesOfPrimitives
"kotlin.ranges"
Ranges
ProgressionsOfPrimitives
"kotlin.ranges"
Ranges
Generic
""
Misc
Primitives
""
Miscpeek
의 예에서 only
에서 Lists
를 지정했기 때문에 libraries/stdlib/src/generated/_Collections.kt
에서 방법이 생성된 것 같다.
Reference
이 문제에 관하여(Kotlin의 stdlib에 대한generated), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/rejasupotaro/items/10b96452845670d7b1f5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
/**
* Returns `true` if the array is empty.
*/
@kotlin.internal.InlineOnly
public inline fun <T> Array<out T>.isEmpty(): Boolean {
return size == 0
}
/**
* Returns `true` if the array is empty.
*/
@kotlin.internal.InlineOnly
public inline fun ByteArray.isEmpty(): Boolean {
return size == 0
}
/**
* Returns `true` if the array is empty.
*/
@kotlin.internal.InlineOnly
public inline fun ShortArray.isEmpty(): Boolean {
return size == 0
}
/**
* Returns `true` if the array is empty.
*/
@kotlin.internal.InlineOnly
public inline fun IntArray.isEmpty(): Boolean {
return size == 0
}
/**
* Returns `true` if the array is empty.
*/
@kotlin.internal.InlineOnly
public inline fun LongArray.isEmpty(): Boolean {
return size == 0
}
/**
* Returns `true` if the array is empty.
*/
@kotlin.internal.InlineOnly
public inline fun FloatArray.isEmpty(): Boolean {
return size == 0
}
/**
* Returns `true` if the array is empty.
*/
@kotlin.internal.InlineOnly
public inline fun DoubleArray.isEmpty(): Boolean {
return size == 0
}
/**
* Returns `true` if the array is empty.
*/
@kotlin.internal.InlineOnly
public inline fun BooleanArray.isEmpty(): Boolean {
return size == 0
}
/**
* Returns `true` if the array is empty.
*/
@kotlin.internal.InlineOnly
public inline fun CharArray.isEmpty(): Boolean {
return size == 0
}
따라서 Kotlin의 stdlib는 템플릿에서 집합에 사용되는 확장 함수 코드를 생성하고 생성된 코드는
libraries/stdlib/src/genereted/
에 놓는다.예를 들어 위의
isEmpty
템플릿은 libraries/tools/kotlin-stdlib-gen/src/templates/Arrays.kt
에서 다음과 같이 정의됩니다.templates add f("isEmpty()") {
inline(Inline.Only)
only(ArraysOfObjects, ArraysOfPrimitives)
doc { "Returns `true` if the array is empty." }
returns("Boolean")
body {
"return size == 0"
}
}
그것은 보기에 약간 스케줄 키 같지만, f
의 정의를 보면fun f(signature: String, init: GenericFunction.() -> Unit) = GenericFunction(signature).apply(init)
, 블록의 수신기는 GenericFunction
, 이 종류는 방법의 생성기입니다.템플릿에서 코드를 생성하려면 다음 명령을 수행합니다.
$ cd libraries/tools/kotlin-stdlib-gen
$ mvn compile exec:java
현재libraries/stdlib/src/generated/Arrays.kt
생성isEmpty
.확장 함수를 stdlib 집합에 추가
실제로 peek
디버깅을 위해 목록의 내용을 엿보는 방법을 추가해 보았다.listOf(1, 2, 3)
.map { ... }
.peek { println(it) } //=> 1, 2, 3
.map { ... }
생성기 방법의 일부분을 소개하다.
name
what
inline
생성 방법이 내연인지 여부를 지정합니다
typeParam
유형 매개변수 지정하기
only
확장 함수를 정의할 컬렉션 지정(Family)
returns
반환 값 유형 지정
body
방법의 내용은 여기에 적혀 있습니다.
잡목peek
의 실현은 다음과 같다.templates add f("peek(action: (T) -> Unit)") {
inline(true)
only(Lists)
typeParam("T")
returns("List<T>")
body {
"""
for (item in this)
action.invoke(item)
return this
"""
}
}
템플릿의 정의는 자기법이고 취미가 있기 때문에 먼저 generated
실현하고 싶은 방법을 쓰고 이동한 후에 템플릿으로 옮기는 것이 좋다.
쓴 후에 구축하고 실행해 보세요.$ mvn compile exec:java
$ ant runtime
$ dist/kotlinc/bin/kotlinc
Type :help for help, :quit for quit
>>> listOf(1,2,3).peek { println(it) }
1
2
3
[1, 2, 3]
가족 정보 Family
어떤 종류를 생성하는지에 대응한다.templates
의only
에서 지정Family
.기본값은 다음과 같이 모든 Family에서 생성됩니다.
Family
packageName
SourceFile
Iterables
"kotlin.collections"
Collections
Collections
"kotlin.collections"
Collections
Lists
"kotlin.collections"
Collections
Sets
"kotlin.collections"
Sets
Maps
"kotlin.collections"
Maps
InvariantArraysOfObjects
"kotlin.collections"
Arrays
ArraysOfObjects
"kotlin.collections"
Arrays
ArraysOfPrimitives
"kotlin.collections"
Arrays
Sequences
"kotlin.sequences"
Sequences
CharSequences
"kotlin.text"
Strings
Strings
"kotlin.text"
Strings
Ranges
"kotlin.ranges"
Ranges
RangesOfPrimitives
"kotlin.ranges"
Ranges
ProgressionsOfPrimitives
"kotlin.ranges"
Ranges
Generic
""
Misc
Primitives
""
Miscpeek
의 예에서 only
에서 Lists
를 지정했기 때문에 libraries/stdlib/src/generated/_Collections.kt
에서 방법이 생성된 것 같다.
Reference
이 문제에 관하여(Kotlin의 stdlib에 대한generated), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/rejasupotaro/items/10b96452845670d7b1f5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
listOf(1, 2, 3)
.map { ... }
.peek { println(it) } //=> 1, 2, 3
.map { ... }
templates add f("peek(action: (T) -> Unit)") {
inline(true)
only(Lists)
typeParam("T")
returns("List<T>")
body {
"""
for (item in this)
action.invoke(item)
return this
"""
}
}
$ mvn compile exec:java
$ ant runtime
$ dist/kotlinc/bin/kotlinc
Type :help for help, :quit for quit
>>> listOf(1,2,3).peek { println(it) }
1
2
3
[1, 2, 3]
Family
어떤 종류를 생성하는지에 대응한다.templates
의only
에서 지정Family
.기본값은 다음과 같이 모든 Family에서 생성됩니다.Family
packageName
SourceFile
Iterables
"kotlin.collections"
Collections
Collections
"kotlin.collections"
Collections
Lists
"kotlin.collections"
Collections
Sets
"kotlin.collections"
Sets
Maps
"kotlin.collections"
Maps
InvariantArraysOfObjects
"kotlin.collections"
Arrays
ArraysOfObjects
"kotlin.collections"
Arrays
ArraysOfPrimitives
"kotlin.collections"
Arrays
Sequences
"kotlin.sequences"
Sequences
CharSequences
"kotlin.text"
Strings
Strings
"kotlin.text"
Strings
Ranges
"kotlin.ranges"
Ranges
RangesOfPrimitives
"kotlin.ranges"
Ranges
ProgressionsOfPrimitives
"kotlin.ranges"
Ranges
Generic
""
Misc
Primitives
""
Misc
peek
의 예에서 only
에서 Lists
를 지정했기 때문에 libraries/stdlib/src/generated/_Collections.kt
에서 방법이 생성된 것 같다.
Reference
이 문제에 관하여(Kotlin의 stdlib에 대한generated), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/rejasupotaro/items/10b96452845670d7b1f5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)