小编Eug*_*sky的帖子

[]在Perl 6中使用匿名函数减少

我们可以使用reduce带有sub两个参数,将它放在双括号中:

> sub mysum { $^a + $^b }
> [[&mysum]] 1,3,5
9
Run Code Online (Sandbox Code Playgroud)

但是如果我们想要使用匿名函数呢?

以下两个变体都会产生编译错误:

> [[&{ $^a + $^b }]] 1,3,5
> [[{ $^a + $^b }]] 1,3,5
Run Code Online (Sandbox Code Playgroud)

syntax functional-programming perl6

15
推荐指数
2
解决办法
178
查看次数

在Perl 6中使用其类中的公共和私有方法

如果我有一个公共的方法,我可以同时使用调用它的类中$.nameself.name:

class TEST {
  has Int $.a;

  method b($x) {
    return $!a * $x;
  }

  method c($y) {
    return self.b($y) * 3; # or $.b($y)
  }
}

my $m = TEST.new(a => 10);
say $m.c(2); # 60
Run Code Online (Sandbox Code Playgroud)

但是,如果我创建b一个私有方法,我只能调用它self!b,而不是$!b,否则我收到以下错误消息:

Attribute $!b not declared in class TEST
Run Code Online (Sandbox Code Playgroud)

这条规则背后的原因是什么?在自己的类中调用方法的规则是什么?

perl6

11
推荐指数
1
解决办法
185
查看次数

是否可以在Perl 6中提供带有哈希的命名参数?

怎么做正确?

> sub adding(:$first, :$second) { $first + $second }
> adding(second => 2, first => 1)
3
> my %param = second => 2, first => 1
{first => 1, second => 2}
> adding(%param)
Too many positionals passed; expected 0 arguments but got 1
  in sub adding at <unknown file> line 1
  in block <unit> at <unknown file> line 1
Run Code Online (Sandbox Code Playgroud)

perl6

10
推荐指数
1
解决办法
229
查看次数

在Perl 6中转换为八进制和从八进制转换

如果我们有一个八进制数,例如0o157,Perl 6可以将其转换为十进制:

> 0o157
111
Run Code Online (Sandbox Code Playgroud)

我们不允许以o八进制表示删除它:

> 0157
Potential difficulties:
    Leading 0 has no meaning. If you meant to create an octal number, use '0o' prefix; like, '0o157'. If you meant to create a string, please add quotation marks.
    ------> 0157?<EOL>
Run Code Online (Sandbox Code Playgroud)

现在让我们进行从十进制到八进制的反向转换:

> printf "%#o\n", 111
0157
Run Code Online (Sandbox Code Playgroud)

现在的问题是:为什么不现在就在o之后0的八进制表示?

同时,如果我们转换为十六进制,那x将是:

> printf "%#x\n", 111
0x6f
Run Code Online (Sandbox Code Playgroud)

perl6

10
推荐指数
1
解决办法
225
查看次数

Perl 6中列表的所有子集

我想知道(记住Perl 6有你想要的一切),是否有一些内置仪器可以帮助产生列表的所有非空子集(顺序无关紧要).

例如,我有一个清单:

my @a = 1, 2, 3;
Run Code Online (Sandbox Code Playgroud)

我需要一个函数,f以便f(@a)产生:

((1), (2), (3), (1, 2), (1, 3), (2, 3), (1, 2, 3))
Run Code Online (Sandbox Code Playgroud)

math set perl6

10
推荐指数
1
解决办法
136
查看次数

Perl 6可以在线工作吗?

这可能是一个天真的,甚至不是一个有效的问题......

我已经制作了一个Perl 6程序(希望能够创建其他几个程序),该程序会考虑一些用户定义的参数来分析本地数据.我的几个同事/同事需要定期输出程序,所以他们给我发送参数,我运行程序并将它们发回输出.
由于整个过程不是很方便,我正在考虑可以做些什么来让每个人都更容易.以下是选项,它们似乎都不理想.

  • 在我的同事的计算机上安装Perl 6并教他们如何使用它.他们中的大多数没有任何编程经验,数据和程序本身应该在所有计算机上保持最新,程序应该在不同的系统上工作相同,所以这可能会使事情变得更糟,而不是更好.
  • 制作程序的在线变体(使用JS等),以便我的同事可以输入参数并在浏览器窗口中获得结果.这对用户来说要容易得多(而且我已经为更简单的程序做了这样的事情),但我更喜欢使用Perl 6 ......

所以,我的问题是:是否有可能以某种方式使Perl 6在线工作?它可以在浏览器中工作吗?或者还有其他解决方案吗?

rakudo perl6

10
推荐指数
2
解决办法
486
查看次数

在Perl 6中过滤与两个正则表达式匹配的元素

这里发生的事情我不太明白.

> my @arr = <ac bc abc>
> @arr.grep: (( * ~~ /a/ ) && ( * ~~ /b/ ))
(bc abc)
Run Code Online (Sandbox Code Playgroud)

> @arr.grep(* ~~ /a/).grep(* ~~ /b/)
(abc)
Run Code Online (Sandbox Code Playgroud)

什么原因?

perl6

10
推荐指数
1
解决办法
159
查看次数

如果False在Perl 6 REPL中产生一个空列表,为什么命令后?

如果条件ifFalse,而不是空输出,则REPL给出()(空List?)

> put 1 if True
1
> put 1 if False
()               # ? What is this?
Run Code Online (Sandbox Code Playgroud)

什么()意思?

perl6

10
推荐指数
4
解决办法
194
查看次数

在Perl 6中声明属于用户定义类的变量

当我声明一个变量,其值属于内置类时,我只是写

my Int $a;
Run Code Online (Sandbox Code Playgroud)

但是当我想使用用户定义的类时,我必须使用 Classname.new.

my class House {
    has $.area is rw;
}

my $house1 = House.new;
$house1.area = 200;
say $house1.area;
Run Code Online (Sandbox Code Playgroud)

所以,我天真的问题是,这种差异的原因是什么?为什么我们不能简单地写my House $house1

我的最终目标是使用一个数组,其值是用户定义的类的实例.如何正确执行以下操作?

my @houses ...;
@houses[10].area = 222;
Run Code Online (Sandbox Code Playgroud)

perl6

9
推荐指数
1
解决办法
147
查看次数

Perl 6错误消息:块<unit>中格式错误的UTF-8

我正在尝试阅读下载的html文件

my $file = "sn.html";
my $in_fh = open $file, :r;
my $text = $in_fh.slurp;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

Malformed UTF-8
  in block <unit> at prog.p6 line 10
Run Code Online (Sandbox Code Playgroud)

如何避免这种情况并访问文件的内容?

perl6

9
推荐指数
1
解决办法
296
查看次数

标签 统计

perl6 ×10

functional-programming ×1

math ×1

rakudo ×1

set ×1

syntax ×1