- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想创建一个基于字符串的类型,该类型将具有长度上限和 - 可选 - 长度下限。即,参数化类型,其中长度范围将是一个参数。
在我的实现中我想要什么:
isa=>Varchar[1, 15]
isa=>Varchar[{min=>1, max=>15,}]
这就是我目前所拥有的:
文件MyTypesTiny.pm
package MyTypesTiny;
use strict;
use warnings;
use Type::Library
-base,
-declare => qw( VarcharRange Varchar );
use Type::Utils -all;
use Types::Standard -types;
use MooseX::Types::Common::Numeric qw( PositiveOrZeroInt );
declare VarcharRange,
as HashRef [PositiveOrZeroInt],
where {
return 0 if ( grep { $_ ne 'min' && $_ ne 'max' } keys %{$_} );
return ( $_->{min} <= $_->{max} )
if ( defined $_->{max} && defined $_->{min} );
return 1;
}, message { "$_" };
coerce VarcharRange, from ArrayRef [PositiveOrZeroInt], via {
my $result;
my @keys = qw(min max);
foreach my $val ( reverse @$_ ) {
my $key = pop @keys // 'bad_range';
$result->{$key} = $val;
}
return $result;
};
1;
文件 test_varchar.pl
#!/usr/bin/env perl
package MyClass;
use Moose;
use MyTypesTiny qw( VarcharRange );
has 'my_range' => (isa=>VarcharRange, is=>'ro', coerce=>1);
package main;
use MyClass;
my $check = MyClass->new(
my_range => [1, 15], # works, as expected
# my_range => [1, 0], # fails, as expected
# my_range => [0, 1, 2], # fails, as expected
);
好的,VarcharRange 有效。现在我必须添加 Varchar 本身。这就是我立即陷入困境的地方:
添加到 MyTypesTiny.pm:
declare Varchar, as Str, where {}, constraint_generator => sub {
# here I have @_ which is an ArrayRef
# and I want to create a VarcharRange object $range from it
# but what exactly should I do?
return sub {
my $len = length($_);
return 0 if ( $range->{min} && $len < $range->{min} );
return 0 if ( $range->{max} && $len > $range->{max} );
return 1;
};
};
我的大脑在沸腾。我已经准备好 ArrayRef。我所需要的只是一个由它构成的 VarcharRange(基本上是一个 HashRef)对象。但是 VarcharRange 是一种类型——一个标记约束和强制规则集的名称。它不对应于一个对象本身。类型的对象是在创建类属性时创建的,但我这里没有任何类在起作用。
最佳答案
这是一个让您能够为“Varchar”类型提供参数的答案。启用参数化类型的神奇之处在于为该类型提供一个 constraint_generator
。该方案没有中间hashref,只有一种类型。
MyTypesTiny.pm:
package MyTypesTiny;
use Types::Standard -all;
use Type::Library -base, -declare => qw(Varchar);
use Type::Utils -all;
sub _get_varchar_args {
die "can only give 0-2 parameters" if @_ > 2;
map assert_Int($_), @_;
return @_ == 1 ? (0, @_) : @_;
}
declare "Varchar",
as Str,
constraint_generator => sub {
my ($min_length, $max_length) = _get_varchar_args(@_);
return sub {
length($_) >= $min_length and length($_) <= $max_length;
};
},
inline_generator => sub {
my ($min_length, $max_length) = _get_varchar_args(@_);
return sub {
my ($constraint, $varname) = @_;
return sprintf(
'length(%s) >= %d and length(%s) <= %d',
$varname,
$min_length,
$varname,
$max_length,
);
};
};
1;
MyClass.pm:
package MyClass;
use Moo;
use MyTypesTiny -all;
has my_string => (
is => 'ro',
isa => Varchar[9, 10],
);
1;
测试器.pl:
#!perl
use MyClass;
my $check = MyClass->new( my_string => 'ASDef45F%'); # length 9, ok
$check = MyClass->new( my_string => 'f45F%'); # length 5, not ok
关于perl - 使用 Type::Tiny 将类型参数化为另一种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42517460/
我喜欢 idea behind tiny-tiny rss :它是轻量级的、开源的、经常更新的,并且 seems to work very well .此外,客户端只需要一个浏览器。我想玩弄源代码并对
我在使用 TinySlider 时遇到问题,我想如果我可以使用重建()和销毁()方法,我也许能够修复问题/错误。 但是,你到底如何在像这样的组件上使用 .destroy() ? https://git
我正在尝试为 Tiny Tiny RSS 构建一个阅读器,但几乎陷入了第一步。我正在将应用程序设置为通过prototype.js (1.6.1) 使用ajax,并尝试简单登录应用程序以检索 key 。
我是 OpenCV 新手,我的 Windows XP 计算机上仅配置了 Tiny C 编译器。我可以使用这个微型 C 编译器来编译用于图像处理的 opencv 程序吗?我已经在我的 windows x
所以我有以下 Dockerfile: FROM ubuntu:latest WORKDIR /vault COPY run.sh /vault/run.sh COPY docker-entrypoin
我希望我的体重文件能够检测人,汽车和自定义对象。我知道YOLOv4-tiny的预训练重量文件是针对80个物体(包括人和汽车)进行训练的。 如果我想让体重文件检测到人,汽车和我的自定义对象,我想从一开始
我正在学习 Tiny OS 教程第 4 课“Mote-PC 串行通信和 SerialForwarder”,但我卡在了它所说的线路上“安装 TestSerial 后,您需要运行相应的 Java 应用程序
我原以为这段代码会出现段错误: char * foo (char my_ascii[10]) { strcpy (my_ascii, "0123456789"); return my_asci
为什么带有“$encoded =encode($encoding, $character, Encode::FB_WARN | Encode::LEAVE_SRC);”行的第二个示例没有捕获编码警告?
我已经下载了 Tiny MCE 的“全套”版本。我按照指示将它放在我的 php 表单中。但我只得到准系统的基本设置。我在插件文件夹中有所有插件???我按照说明使用以下代码:
我想根据自己的需要定制tiny mce。如果有人对此有任何想法,请帮助我。 问题是当您将微型 mce 添加到您的页面时,它位于 HTML dom 中的文本区域之后。 IE。 ......... 我想
我正在使用tiny table V3对表格进行排序,并在表格顶部添加一个搜索框。 当前排序是根据列名进行的,即第 1 列这是工作 fiddle ,http://jsfiddle.net/2vdh2ac
我有一个文本框和文本区域,我已经尝试在您集中注意力时实现在元素上,会显示 Tiny MCE 栏。 问题是它无法正常工作,在我自己的元素中,它甚至会自行更改文本框和文本区域的宽度和高度。 我在 jsFi
我有一个自定义 DateTime 类型,它定义了从字符串到 DateTime 的强制转换,如下所示: package Library; use Type::Library -base, -declar
假设我有以下 YAML 文件: --- task: 1: command: '' desc: '' 2: command: '' desc: '' 我使用 Pe
如何在 Tiny Colorpicker 中编写更改事件代码 请帮助我! 最佳答案 colorPicker github $(function() { $('#colorA').colorPick
我正在为一位音乐 Composer 建立一个网站。他想通过 Soundcloud 发布他的作品样本,并将其中一些样本嵌入到他的网站上。他有一个高级帐户。 我想让这对他来说尽可能简单(他不是极客)。基本
我正在为一位音乐 Composer 建立一个网站。他想通过 Soundcloud 发布他的作品样本,并将其中一些样本嵌入到他的网站上。他有一个高级帐户。 我想让这对他来说尽可能简单(他不是极客)。基本
我用 tinymce 4 替换了 tinymce 3。Tinymce 4 占据了所有可用的宽度: tinyMCE.init({ mode: 'textareas', theme: 'mo
我想创建一个基于字符串的类型,该类型将具有长度上限和 - 可选 - 长度下限。即,参数化类型,其中长度范围将是一个参数。 在我的实现中我想要什么: 字符串长度范围的单独类型。 不使用 MooseX::
我是一名优秀的程序员,十分优秀!