小编Viv*_*dav的帖子

是否为所有实现特征的类型生成虚函数表?

如果我有一个特质Foo,并且有一些实现者BarBaz.

impl Foo for Bar {
}
Run Code Online (Sandbox Code Playgroud)
impl Foo for Baz {
}
Run Code Online (Sandbox Code Playgroud)

但是假设我只使用其中一个作为特征对象,

let bar = Bar {..};
let foo: &dyn Foo = &bar;

Run Code Online (Sandbox Code Playgroud)

那么我的二进制文件仍然有两个 vtable 吗?这种行为在调试和发布版本之间是否会发生变化?

traits vtable rust trait-objects

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

Toast.show() 未在模拟器中显示消息

这似乎适用于 Android 6 Marshmallow 设备小米红米 3S。看起来像是模拟器问题,但在任何其他意义上都不是真正的行为不端。

我是Android开发的初学者,了解不多。我已经确认我的应用程序通知已开启。

规格:API 级别:Android 4.4 (KitKat)

安卓工作室版本:3.6.4

模拟器:Pixel XL API 28

我试图做的只是弹出一个吐司消息,告诉按钮被点击了多少次。

这是 MainActivity.kt:

class MainActivity : AppCompatActivity() {
    private var greetingCount = 0
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        btnToastMessage.setOnClickListener {
            val suffix = when (++greetingCount) {
                1 -> "st"
                2 -> "nd"
                3 -> "rd"
                else -> "th"
            }
            val greetingMsg = "Welcome for the $greetingCount$suffix time(s)!"
            Toast.makeText(this@MainActivity, greetingMsg, Toast.LENGTH_LONG).show()
            Log.i(".MainActivity", "Clicked Button")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是 activity_main.xml 文件:

<?xml version="1.0" encoding="utf-8"?> …
Run Code Online (Sandbox Code Playgroud)

android toast kotlin

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

Rust 宏可以跨版本共享吗?

假设 Rust 2018 宏async在其中定义了一个函数。它使用的语法与 Rust 2015 不兼容。因此,如果您使用 2015 版本编译您的包,宏中的扩展代码不会与之冲突吗?

我不太熟悉过程宏或声明性宏的内部工作原理,但我想它们需要生成特定于版本的代码,因为它们的输出将被视为与其余代码相同。如果是这样,我如何跨版本边界共享宏导出。我需要根据每个版本重新编写它们吗?这似乎无法扩展,特别是如果版本应该每 3 年左右发布一次。

macros rust rust-macros rust-2018 rust-2021

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

std::vec::shrink_to_fit 在 Rust 中如何工作?

是否std::vec::shrink_to_fit分配一个新的、较小的vec.len()数据缓冲区,复制到其中,并销毁旧缓冲区,或者是否以某种方式向内存分配器指示可以取消分配缓冲区的未初始化部分,并简单地释放该部分内存?这可能吗?这取决于内存分配器吗?

我很抱歉在这里问一个切题的问题,但如果可能的话,为什么我们不实现从向量前面弹出作为一个简单的“std::mem::size_of<T>()从缓冲区开始释放内存量,并递增我们的指针移动一位”,而不是将所有元素移动一位?

vector heap-memory allocator rust

4
推荐指数
2
解决办法
477
查看次数

`return` 语句不应该返回 `!` (从不输入)吗?

示例代码片段:

fn foo() -> i32 {
    let a = return 2;
    a + 1
}
fn main() {
    println!("{}", foo());
}
Run Code Online (Sandbox Code Playgroud)

我希望由于a永远不会真正被分配任何东西,所以它的类型应该是!. 然而编译器告诉我它的类型实际上是()(单位类型)。这对我来说很奇怪。这背后的原因可能是什么?

return rust

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

无法在 Kotlin 中对象的超类构造函数中使用常量

这样做工作正常:

class DBHelper : SQLiteOpenHelper(GLOBAL_CONTEXT, DATABASE_NAME,null, DATABASE_VERSION) {
 companion object {
  private const val DATABASE_NAME = "database.db"
  private const val DATABASE_VERSION = 1
 }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

object DBHelper : SQLiteOpenHelper(GLOBAL_CONTEXT, DATABASE_NAME,null, DATABASE_VERSION) {
  private const val DATABASE_NAME = "database.db"
  private const val DATABASE_VERSION = 1
}
Run Code Online (Sandbox Code Playgroud)

为什么会出现这种情况以及如何解决它(除了将对象转换为类)?

object kotlin

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