小编use*_*024的帖子

如何在Kotlin中获得KType?

我正在试验Kotlin中的反射功能,但我似乎无法理解如何获取KType值.

假设我有一个将短语映射到对象工厂的类.在模糊的情况下,用户可以提供type将搜索范围缩小到仅返回该类型对象(或某些子类型)的工厂的参数.

fun mapToFactory(phrase: Phrase,
          type: KType = Any::class): Any {...}
Run Code Online (Sandbox Code Playgroud)

type我需要接受几乎任何东西,包括Int从我的经验中看起来有点特别对待.默认情况下,它应该是类似的Any,这意味着"不排除任何工厂".

如何为默认值(或任何值)指定type

reflection kotlin kotlin-reflect

3
推荐指数
2
解决办法
3325
查看次数

如何实现从某个源获取的属性,直到它直接在Kotlin中设置?

我目前有一个声明如下的属性:

class Foo(val base : FooBase){
    var _number: Int? = null

    override var number: Int
        get() = _number ?: base.number
        set(value) {_number = value}
}
Run Code Online (Sandbox Code Playgroud)

但是,我有很多这样的属性,导致相当多的代码重复.有办法避免这种情况吗?我知道属性委托是一种方法,但我不确定如何ReadWriteProperty<...>正确实现.如果我应该使用它,我如何使用"属性"值?

properties kotlin

2
推荐指数
1
解决办法
71
查看次数

在Haskell中,如何为此函数提供正确的数字?

我是Haskell的初学者,试用GPipe.

以下代码运行正常:

shader <- compileShader $ do
  primitiveStream <- toPrimitiveStream id
  let transPrims = fmap
        (\(pos,col) -> (perspective (pi/3) 1 1 100 !* pos, col)) 
        primitiveStream
  fragmentStream <- rasterize
        (const (FrontAndBack, ViewPort (V2 0 0) (V2 500 500), DepthRange 0 1))
        transPrims
  drawContextColor (const (ContextColorOption NoBlending (V3 True True True)))
                   fragmentStream
Run Code Online (Sandbox Code Playgroud)

但是,我有2个变量windowWidth和windowHeight(都是Int类型),当我尝试这样做时:

shader <- compileShader $ do
  primitiveStream <- toPrimitiveStream id
  let transPrims = fmap
        (\(pos,col)
         -> (perspective (pi/3) (windowWidth/windowHeight) 1 100 !* pos, col))
        primitiveStream
  fragmentStream <- rasterize
        (const …
Run Code Online (Sandbox Code Playgroud)

haskell

1
推荐指数
1
解决办法
103
查看次数

标签 统计

kotlin ×2

haskell ×1

kotlin-reflect ×1

properties ×1

reflection ×1