首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"with“函数的用法

"with“函数的用法
EN

Stack Overflow用户
提问于 2015-10-18 13:33:44
回答 2查看 265关注 0票数 7

有没有人能解释一下“有”功能是用来做什么的?

签名

代码语言:javascript
复制
public inline fun <T, R> with(receiver: T, f: T.() -> R): R = receiver.f()

文档

调用指定的函数f,以给定的接收器作为接收方,并返回其结果。

我发现它在安东尼奥·莱瓦这个项目中使用。它用于移动视图:

代码语言:javascript
复制
fun View.animateTranslationY(translationY: Int, interpolator: Interpolator) {
    with(ObjectAnimator.ofFloat(this, "translationY", translationY.toFloat())) {
        setDuration(context.resources.getInteger(R.integer.config_mediumAnimTime).toLong())
        setInterpolator(interpolator)
        start()
    }
}

我在想,我知道我把它转移到

代码语言:javascript
复制
fun View.animateTranslationX(translationX: Int, interpolator: Interpolator) {
    with(ObjectAnimator()) {
        ofFloat(this, "translationX", translationX.toFloat())
        setDuration(context.resources.getInteger(R.integer.config_mediumAnimTime).toLong())
        setInterpolator(interpolator)
        start()
    }
}

但它不编译..。但是我认为ObjectAnimaton是接收者,它得到了我将在{}括号中调用的所有东西。谁能解释真正的含义,并提供一个基本的例子-至少比这更基本?:D

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-21 06:13:10

这个想法与Pascal中的with关键字相同。

总之,这里有三个具有相同的语义的示例:

代码语言:javascript
复制
with(x) {
   bar()
   foo()
}
代码语言:javascript
复制
with(x) {
   this.bar()
   this.foo()
}
代码语言:javascript
复制
x.bar()
x.foo()
票数 4
EN

Stack Overflow用户

发布于 2015-10-19 14:04:32

我想我明白“用”做什么了。看看代码:

代码语言:javascript
复制
class Dummy {
    var TAG = "Dummy"

    fun someFunciton(value: Int): Unit {
        Log.d(TAG, "someFunciton" + value)
        }
    }

    fun callingWith(): Unit {
    var dummy = Dummy()
    with(dummy, { 
        someFunciton(20) 
    })

    with(dummy) {
        someFunciton(30)
    }

}

如果我运行这段代码,就会得到一个someFunciton调用,调用20,然后调用30 param。

因此,上面的代码可以转换为:

代码语言:javascript
复制
fun View.animateTranslationX(translationX: Int, interpolator: Interpolator) {
    var obj = ObjectAnimator()
    with(obj) {
        ofFloat(this, "translationX", translationX.toFloat())
        setDuration(context.resources.getInteger(R.integer.config_mediumAnimTime).toLong())
        setInterpolator(interpolator)
        start()
    }
}

我应该工作-所以我们必须有瓦尔。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33198514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档