如何将类属性声明为类名的联合?

2023-11-25

我正在阅读电子表格寻找不同的结构。当我使用 Moose 尝试以下操作时,它似乎做了我想要的事情。我可以创建不同类型的对象,将其分配给找到的成员 并转储 Cell 实例以供审查。

package Cell
{
  use Moose;
  use Moose::Util::TypeConstraints;
  use namespace::autoclean;

  has 'str_val'    => ( is => 'ro', isa => 'Str', required => 1 );
  has 'x_id'       => ( is => 'ro', isa => 'Str', ); # later required => 1 );
  has 'color'      => ( is => 'ro', isa => 'Str', );
  has 'border'     => ( is => 'ro', isa => 'Str', );
  has 'found'      => ( is => 'rw', isa => 'Sch_Symbol|Chip_Symbol|Net', );
  1;
}

如果我尝试在 Perl 6 中执行相同的操作,它将无法编译。

class Cell {
  has Str $.str_val              is required;
  has Str $.x_id                 is required;
  has Str $.color;
  has Str $.border;
  has Sch_Symbol|Chip_Symbol|Net $.found is rw
}
Malformed has
at C:\Users\Johan\Documents/moose_sch_3.pl6:38
------>   has Sch_Symbol'<'HERE'>'|Chip_Symbol|Net $.found is rw

我怎样才能在 Perl 6 中做到这一点?


您可能希望他们扮演共同角色并将其指定为类型

role Common {}
class Sch-Symbol does Common {…}
…

class Cell {
  …
  has Common $.found is rw;
}

或者你将不得不使用where约束

class Cell {
  …
  has $.found is rw where Sch-Symbol|Chip-Symbol|Net;
}

您还可以创建一个子集来包装where约束。

subset Common of Any where Sch-Symbol|Chip-Symbol|Net;

class Cell {
  …
  has Common $.found is rw;
}

请注意,一个where约束比使用公共角色慢。

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

如何将类属性声明为类名的联合? 的相关文章

随机推荐

  • 如何打乱 ArrayList [重复]

    这个问题在这里已经有答案了 我需要一些帮助来编写一个对 ArrayList 进行洗牌的方法 我不知道该在我的方法中放置什么 这是我到目前为止所拥有的 我尝试使用随机方法来随机化列表中的整数 但这不起作用 有人可以告诉我该怎么做吗 这是我尝试
  • 随机数生成最安全的种子是什么?

    为随机数生成器提供种子的最安全的熵源是什么 这个问题与语言和平台无关 适用于网络上的任何机器 理想情况下 我正在寻找云环境中的机器或托管公司提供的服务器可用的资源 有两个重要的弱点需要记住 使用时间发送随机数生成器违反了CWE 337 使用
  • 如何使用 JavaScript 将所有计算的 CSS 样式从一个元素移动到另一个元素?

    我有一个外部样式表 它将某些样式应用于给定元素 我希望能够将这些样式 使用 JavaScript 完全移动到不同的元素 而无需事先了解正在应用的样式 The CSS td padding 5px div HTML td div Apply
  • Grails 域类必须与数据库绑定吗?

    对于 grails 来说 我是一个十足的菜鸟 对于 groovy 来说 我还是一个菜鸟 所以如果这是一个愚蠢的问题 我深表歉意 我正在构建一个简单的 Web 应用程序 我想根据文件系统对象 即目录结构和文件类型 而不是数据库数据来控制应用程
  • 大引号导致 Java Scanner hasNextLine() 为 false —— 为什么?

    我在让 java util Scanner 读取我在记事本中保存的文本文件时遇到问题 即使它与其他文件一起工作得很好 基本上 当它尝试读取问题文件时 它完全空手而归 hasNextLine 为假 缓冲区为空等 我将其范围缩小到这样一个事实
  • 无法在 @INC 中的 /usr/share/perl/5.14/CPAN/FirstTime.pm 中找到 local/lib.pm

    我正在尝试使用 Perl第一次我的系统是 Ubuntu 12 04 我安装了 Perl v 5 14 2 我抬头如何安装 Perl 模块 所以我开始如下 perl MCPAN e shell 向导开始配置环境 如下所示 http paste
  • Vulkan 的 VkAllocationCallbacks 使用 malloc/free() 实现

    我正在阅读Vulkan 内存分配 内存主机似乎 VkAllocationCallbacks 可以使用简单的 malloc realloc free 函数来实现 typedef struct VkAllocationCallbacks voi
  • 在 Django 模型中排序多对多关系

    假设 Django 模型中有多对多关系 例如 class GroceryList models Model items models ManyToManyField GroceryItem related name in lists cla
  • Rust 中如何在 future 和 Stream 之间进行选择?

    我刚刚开始在 Rust 中尝试 futures tokio 我可以仅使用 future 或仅使用流来完成非常基本的事情 我想知道你如何在未来和流之间进行选择 如何将 tokio 文档中的玩具问题扩展到使用tokio timer Timer进
  • 在JS内部动态加载JS[重复]

    这个问题在这里已经有答案了 我有一个动态网页 我需要在其中导入外部 JS 文件 在IF条件 在另一个 javascript 文件中 我试图寻找可行的解决方案 但没有成功 我尝试使用以下方法将 JS 文件加载到 DOMdocument cre
  • c# RawPrinterHelper 将数据发送到打印机,打印机假脱机并状态“已打印”但实际上并不打印

    我正在使用 RawPrinterHelper 类 如下所述 https support microsoft com en us help 322091 how to send raw data to a printer by using v
  • Firefox 上 Tumblr 的 Base64 字体编码

    我正在开发一个 Tumblr 主题 并且想要使用我在所有浏览器上都有的字体 由于 Firefox 不允许对其他域的 css 字体进行 http 请求 因此该字体目前无法在 Firefox 中使用 但可以在使用标准 font face 语法的
  • 您放弃 MVVM 而采用基于 UserControl 的 WPF 架构有何体验?

    我们基于以下内容构建了一个大型应用程序复合应用程序库 and MVVM using 基础设施学控制 为了节省时间并使申请更加直接 我们废除了 MVVM 要求 我们现在没有 Presenter 或 ViewModel 我们的 View 已成为
  • 为什么使用 GCC 时库链接器标志有时必须放在最后?

    我正在编写一个使用 librt 的小型 C 程序 让我感到非常惊讶的是 如果我将链接标志放在开头而不是结尾 程序将无法编译 目前 为了编译程序 我这样做 gcc o prog prog c lrt std gnu99 如果我执行以下操作 将
  • 如何获取SDCARD上存储的图片的Uri?

    我需要获取存储在 SDCARD 上的图像的 URI 当我想获取存储在可绘制对象上的图像的 Uri 时 我使用它并且效果完美 i putExtra Intent EXTRA STREAM Uri parse android resource
  • jquery Draggable +sortable 与自定义 html 的放置事件?

    将元素放置在可放置区域时更改 html 像这样的东西 http the stickman com files jquery draggable sortable html 但是当我删除元素时 会更改放置的 html 其他示例 我有 2 个列
  • 查看复杂 OCaml 代码中的推断类型

    我是一名 OCaml 新手 正在使用一些我没有编写的相当复杂 至少对我来说 的 OCaml 代码 如果我可以看到某些值的推断类型 那么对理解它会有很大帮助 就像我可以通过将鼠标悬停在任何值上来使用 F 和 Visual Studio 一样
  • Angularjs:控制器被多次调用

    由于某种原因 当我在资源 1 和资源 2 之间切换时 我的控制器被双重调用 这是代码 索引 html
  • EditText在设备旋转后自动保存值

    我在 Android Studio 中创建了一个示例应用程序来了解 Android 应用程序的生命周期 我知道方向改变会完全重新启动活动 即再次调用 OnCreate 方法 据我所知 方向改变应该会破坏上下文并在设备旋转后显示空白文本 但不
  • 如何将类属性声明为类名的联合?

    我正在阅读电子表格寻找不同的结构 当我使用 Moose 尝试以下操作时 它似乎做了我想要的事情 我可以创建不同类型的对象 将其分配给找到的成员 并转储 Cell 实例以供审查 package Cell use Moose use Moose