在具有连续名称的循环中创建值

问题描述 投票:0回答:3

我想在循环中创建名称为b1b2b3b4 ...的连续后缀的vals

带代码

for( a <- 1 to 10){
         val 'b'+a = new Button()
      }

因此发生以下情况

val b1 = new Button()
val b2 = new Button()
val b3 = new Button()
val b4 = new Button()
val b5 = new Button()
val b6 = new Button()
val b7 = new Button()
val b8 = new Button()
val b9 = new Button()
scala for-loop
3个回答
4
投票

正如Carcigenicate在评论部分中建议的那样,您可能要使用List或其他类似的集合/数据结构:

(for(_ <- 0 until 10) yield new Button()).toList

toList呼叫是最优的,否则返回Range


2
投票

如果只需要按钮列表,请执行以下操作:

val buttons = List.fill(10)(new Button())

然后按索引访问它们

val b2 = buttons(1) // First element is 0

1
投票

如果您想按名称访问按钮,请尝试创建一个Map

Map

注意,我们不能动态(在运行时)声明值的名称,因此以下是语法错误

val buttons = Map.from((1 to 10).map(i => s"b$i" -> new Button()))
buttons.get("b1")

要理解的关键概念是在compile-timeruntime之间发生的区别,即,在程序运行的[[before与after之间提供的设施之间的区别。该程序运行。在val "x"+1 = 42 // compile-time error 中引入值的名称是一个纯粹的编译时概念。

© www.soinside.com 2019 - 2024. All rights reserved.