如何使用仅在运行时已知的值来初始化对象值?

2023-12-28

假设我正在尝试编写一个简单的井字游戏。它有一个 M x N 字段。游戏只有一个字段,因此它可能应该用单例来表示object。像这样:

object Field {
    val height : Int = 20
    val width : Int = 15
    ...
}

但我不想对高度和宽度进行硬编码,因此如果可以在运行时通过构造函数或其他方式将它们传递给对象,那就太好了。但objects 不能有构造函数。

嗯,我可以改变height and width to be vars,而不是vals并引入一种新方法

def reconfigure (h:Int, w:Int) = {
    height = h
    width = w
}

并在游戏开始时调用它。但它也不优雅。

那么,有没有一种巧妙的方法可以做到这一点 - 即拥有对象val使用运行前未知的值初始化?


您可以使用惰性值。如果您仍然需要使用 var,这可能会使事情变得更加复杂。

case class Config( height: Int, width: Int )
object Field {
  val defaultConfig = Config( 20, 15 )
  var config: Option[Config] = None
  def getConfig = config.getOrElse( defaultConfig )
  lazy val height = getConfig.height
  lazy val width = getConfig.width
}
object Main extends App {
  Field.config = Some( Config( 30, 25 ) )
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用仅在运行时已知的值来初始化对象值? 的相关文章

随机推荐

  • 如何在 Scala 中为具有构造函数参数的 Actor 创建 TestActorRef?

    The Akka 测试文档 http doc akka io docs akka snapshot scala testing html给出以下创建 TestActorRef 的方法 import akka testkit TestActo
  • 在 R 中并行训练多个网络(使用 Keras)

    我想在 R 中训练 n 个不同的神经网络parallel 我怎样才能做到这一点 我对并行化相当陌生 所以我发现这有点困难 这是我的 1 个网络的代码 到目前为止 model lt keras model sequential Define
  • 按列对 Pandas DataFrame 进行排序

    如何按列对 pandas 数据框进行排序 我在这里读到http pandas pydata org sort values http pandas pydata org pandas docs version 0 19 2 generate
  • MigLayout 对齐中心不会使 JLabel 组件居中

    我在用米格布局 http www miglayout com 我发现它很灵活等 但我在用它居中放置东西时遇到问题 我尝试使用gapleft 50 但似乎百分比数字需要根据不同的帧大小进行更改 因为它也取决于组件的大小 所以如果组件使用居中g
  • 如何在编译时设置 Electron 变量?

    我正在使用 electro builder 来打包 React 应用程序 我的应用程序使用 create react app 样板 有没有一种方法可以在编译时设置变量 以便可以在运行时在主进程的代码内的条件中使用它 我正在寻找 C 预处理器
  • Woocommerce 仅显示可变产品的一种折扣价格

    这是我的 WooCommerce 网站 sweetworldcandy com 问题是 可变产品价格中的最低和最高 值显示我想要的是 如果产品不打折 则显示最低价值 如果产品打折 则通过添加斜杠作为删除标签 显示最低价值和报价的最低价值 我
  • 如何将一个单词拆分为二元组,包括重复的单词?

    我正在尝试将一个单词分成二元组 我正在使用qlcMatrix包 但它只返回不同的二元组 例如 对于单词 detected 它只返回 te 一次 这是我使用的命令 test domain lt c detected library qlcMa
  • 用于存储 jQuery 解析信息的最佳 HTML 属性是什么?

    必须支持 IE6 并且必须验证与 XHTML Strict 1 0 这个很难解释 我使用通用类名来启动关联元素上的插件功能 我还希望将选项与存储在属性中的元素关联 a href url com class popup My Link a 这
  • Git 准备好被推荐给我的老板了吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想向我的老板推荐 Git 作为一个新的源代码控制系统 因为我们还停留在 90 年代的 VSS 哎哟 但是这些工具和第 3 方支持是否足够好 具体来说
  • Angular 4 到 5 更新 ./node_modules/@angular/core/esm5/core.js 中的警告

    我已根据此更新了 Angular 4 至 5tutorial https hackernoon com understanding creating and subscribing to observables in angular 426
  • JobIntentService 与 JobService 有何关系?

    的情况下Service and IntentService主要区别是Service在主线程上运行 同时IntentService不是 当工作完成时后者会自行完成 而我们必须调用stopService or stopSelf 停止一个Serv
  • mysql 获取一天的总工作时间

    我有一个 MySQL 表 其中记录了员工登录和注销时间 这里的in out列中1 代表登录 0 代表注销 id User id Date time in out 1 1 2011 01 20 09 30 03 1 2 1 2011 01 2
  • Mapbox 决定重叠顺序

    I have some features on the map displayed as icons I want to decide which icons should be hidden and which should be dis
  • 不同函数中同名的静态变量如何被系统识别?

    AFAIK 我们可以在不同的函数中有两个同名的静态变量吗 编译器和符号表如何管理它们 他们的身份如何单独管理 编译器不会将静态变量的名称存储在链接符号表中 就链接器而言 它们只是模块的一部分的一些内存 这可能不是在所有情况下 100 正确
  • Spring Security:根据实体不同的身份验证方法

    第一篇文章在这里 希望我做得对 在一个项目中 我们有一个场景 其中有一个具有多个实体的 Web 应用程序 目前 登录是通过默认的 JDBC Spring Security 提供程序进行管理的 工作正常 对于新的需求 我们需要每个实体都可以有
  • 通过 Z3 C++ API 使用浮点运算

    我正在尝试使用 Z3 解决非线性实数问题 我需要 Z3 来生成多个解决方案 在问题域中 精度并不是关键问题 我只需要小数点后一位或两位小数 因此 我需要设置 Z3 不探索实数的所有搜索空间 以最大限度地减少找到多个解决方案的时间 我正在尝试
  • `git rebase` 不更新分支?

    我有这个 master foo v v bar A B C D v E F G 我要这个 master foo v v bar A B C D v E F G so I我认为我需要做 git checkout bar git rebase
  • 如果通常的“t()”不起作用,如何转置 r 中的矩阵?

    我有一个矩阵 我试图在 R 中转置 但 t 函数没有返回正确的答案 如何转置矩阵 gt xx matrix c 3 7 4 8 2 byrow TRUE gt xx 1 2 1 3 7 2 4 8 gt t xx 1 0 7071068 0
  • 如何在Delphi中检查素数

    我想将 1 到 10000 之间的所有素数读入一个动态数组 将所有非素数读入另一个动态数组 然后将素数数组读入richedit1到目前为止我有 procedure primearrays var j k l i m integer k is
  • 如何使用仅在运行时已知的值来初始化对象值?

    假设我正在尝试编写一个简单的井字游戏 它有一个 M x N 字段 游戏只有一个字段 因此它可能应该用单例来表示object 像这样 object Field val height Int 20 val width Int 15 但我不想对高