用默认值初始化成员的最优雅的方法

2024-02-26

有什么方法可以利用初始化列表来可选地初始化可选 构造函数中的参数?下面的例子诉诸于if(?x)类型 正文中的逻辑,因为尚不清楚如何设置_x仅在初始化列表中 如果传入的话.

class Point { 
    double _x = 0.0;
    double get x => _x;
    double _y = 0.0;
    double get y => _y;

    Point(
        {
        double x,
        double y
        })
    { 
        if(?x) { _x = x; }
        if(?y) { _y = y; }
    }
}

另一种方法是使用构造函数:

Point(
      {
        double x: 0.0,
        double y: 0.0
      }) : _x = x, _y = y
{
}

但随后您会重复自己(0.0 不止一处),看起来 _x 和 _y 被初始化了两次,一次为成员初始化,另一次由初始化列表初始化。此外,成员初始值设定项的一个好处是它可以是函数调用,而默认参数的默认值似乎需要常量。我希望/意识到性能影响很小。只是想要一个很好的规范方法,可能用于代码生成。


您可以使用以下方式在构造函数中初始化变量this前缀,例如:

class PointA { 
  double _x;
  double get x => _x;
  double _y;
  double get y => _y;

  PointA({double this._x=0.0, double this._y=0.0});
}

class PointB { 
  final double x;
  final double y;

  Point({double this.x=0.0, double this.y=0.0});
}

void main() {
  new PointA(_y:2.0); 
  new PointA(_x:3.0); 
  new PointA(_x:2.0, _y:3.0); 

  new PointB(y:2.0); 
  new PointB(x:3.0); 
  new PointB(x:2.0, y:3.0); 
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用默认值初始化成员的最优雅的方法 的相关文章

随机推荐

  • 如何添加 MSAccess 连接到 CodeIgniter 或 CakePHP?

    我正在尝试使用 Microsoft Access 数据库进行演示项目 我正在考虑在 CodeIgniter 或 CakePHP 中进行该项目 忽略使用 Microsoft Access 可能存在的愚蠢行为 我无法准确地弄清楚连接字符串如何与
  • 将多个单选按钮绑定到单个布尔值

    背景 我有一个包含三个布尔值的模型 public class PageDataModel public bool setting1 get set public bool setting2 get set public bool setti
  • 附加!在计划中?

    我目前正在学习 R5RS 方案 来自 PocketScheme 我发现我可以使用内置于方案的某些变体 但不是全部 中的函数 Append 换句话说 破坏性地改变列表 我对实际代码并不感兴趣 而是对答案感兴趣 而是对将列表作为函数 或向量或字
  • CSS3 文本阴影效果与 jQuery

    我希望能够创建与 CSS3 text shadow 属性相同的效果 使其可供不支持此 CSS3 属性的浏览器 例如 IE 7 和 8 使用 所以我找到了两个插件 文字阴影 https web archive org web 20141108
  • Qt:无法从输入设备读取:没有这样的设备

    我有一个在嵌入式 Linux 平台 i Mx 6 上运行的 Qt 应用程序 我的应用程序应支持触摸屏作为主要输入设备和可选的 USB 键盘 如果已连接 所以现在 我已配置要启动的应用程序 如下所示 my qt app plugin tsli
  • 可更新的 VIEW 不适用于 Postgres 9.5 中的 ON CONFLICT

    PostgreSQL 版本 9 5 4 我有一个表定义为 CREATE TABLE IF NOT EXISTS TEST 1 ID SERIAL PRIMARY KEY C1 BYTEA C2 TEXT NOT NULL C3 BOOLEA
  • 如何从多维数组中找到最大的数组[重复]

    这个问题在这里已经有答案了 可能的重复 获取多维数组中元素的最大值 https stackoverflow com questions 2189479 get the maximum value from an element in a m
  • 获取 Instagram 访问令牌

    我们有一个客户 他的网站上有一个简单的 Instagram 功能 可以按特定标签提取照片 他们只是注意到它不起作用 收到错误 访问令牌无效 我想从一号开始就因为更新了 我们过去不需要访问令牌 因为我们没有对用户做任何事情 只是标签 现在看来
  • Nuxt.js - 在页面中添加两个布局

    我是初学者Nuxt js我正在将 Vue 项目转换为 Nuxt js 并且我想在一个页面上使用两种布局 默认的一个和另一个 逻辑是这样的 第一个布局是 默认 或所有页面上的标题 第二个布局是设置栏 In settings我的页面有 3 条路
  • Vue3 + Vite + Typescript:作用域插槽类型错误

    我有一个包含以下 devstack Vue3 Vite TypeScript 的项目 并且出现以下错误v slot Element implicitly has an any type because expression of type
  • 河内塔序言

    您好 我在实施河内塔时遇到问题 我需要打印包含必要动作的列表列表 但我的算法仅在光盘数量为 N 1 时才起作用 这是我的代码 move 1 X Y L append X Y L move N X Y Z N gt 1 M is N 1 mo
  • javascript 源映射:将映射文件保留在本地,仅用于调试生产 javascript

    我想调试生产网站 但我不想将地图文件上传到服务器上 出于隐私原因 因为它是公开的 对吧 是否可以 我不相信目前任何浏览器都允许从本地文件按需加载源映射 因此您必须以某种方式将源映射放到网上 一种解决方案可能是创建一个 htaccess 文件
  • Angular:拦截 HTTP 错误并继续链

    我想将某些 HTTP 错误代码视为非错误 并正常处理它们的响应 所以我尝试添加一个HttpInterceptor捕获 500 个状态代码 并返回原始响应 Angular 将其放入error error intercept req HttpR
  • 即使类型不可能实现特征,它是否是报告“特征实现冲突”的编译器限制?

    当试图回答时这个问题 https stackoverflow com questions 55628334 trait function conditional default implementation 我写了这段代码 trait My
  • 如何实现XMPP发送推送通知

    我想使用 XMPP 以便我的应用程序能够向 Android 手机 1 5 及更高版本 发送更新 我非常想使用 XMPP 向手机发送推送通知 我将如何实现这一目标 目前 我的 Web 应用程序正在 apache tomact 上运行 带有许多
  • 如何为 Stripe 结帐会话生成已付款发票 PDF?

    目前 我的网络应用程序在通过 Stripe 结账购买后 会通过电子邮件向客户发送 Stripe 收据 然而 对于某些客户来说 这还不够 他们想要一张已付款的购买发票 上面有我的企业和他们的企业的信息 如何使用这些信息生成 PDF 我调查过
  • 不允许出现重复的“row.names”错误

    我正在尝试加载一个包含 14 列的 csv 文件 如下所示 StartDate var1 var2 var3 var14 当我发出这个命令时 systems lt read table http getfile pl test csv he
  • 在 pandas 中解析 POSIX 时间戳的惯用方法?

    我有一个 csv 文件 其中的时间列表示 POSIX 时间戳 以毫秒为单位 当我在 pandas 中读取它时 它正确地将其读取为 Int64 但我想将其转换为 DatetimeIndex 现在我首先将其转换为日期时间对象 然后将其转换为 D
  • 如何以编程方式获取 Android 上的所有热量信息(CPU [所有核心]、GPU、设备等)?

    我正在尝试以编程方式提取 Android 应用程序中的热信息 但没有足够的文档来执行此操作 我想要提取的东西是这样的 vbal low 37 9 C gold virt max step 28 2 C cpu3 银 lowf 27 8 C
  • 用默认值初始化成员的最优雅的方法

    有什么方法可以利用初始化列表来可选地初始化可选 构造函数中的参数 下面的例子诉诸于if x 类型 正文中的逻辑 因为尚不清楚如何设置 x仅在初始化列表中 如果传入的话 class Point double x 0 0 double get