首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将复数从命令行传递到次MAIN?

如何将复数从命令行传递到次MAIN?
EN

Stack Overflow用户
提问于 2016-03-08 15:59:57
回答 2查看 127关注 0票数 4

我有以下一些琐碎的脚本:

代码语言:javascript
复制
#!/usr/bin/env perl6

use v6.c;

sub MAIN($x)
{
    say "$x squared is { $x*$x }";
}

当用实数调用它时,这是非常好的,但是我也想把复数传递给它。当我按原样尝试时,会发生以下情况:

代码语言:javascript
复制
% ./square i
Cannot convert string to number: base-10 number must begin with valid digits or '.' in '⏏i' (indicated by ⏏)
  in sub MAIN at ./square line 7
  in block <unit> at ./square line 5

Actually thrown at:
  in sub MAIN at ./square line 7
  in block <unit> at ./square line 5

当我改变我的脚本

代码语言:javascript
复制
#!/usr/bin/env perl6

use v6.c;

sub MAIN(Complex $x)
{
    say "$x squared is { $x*$x }";
}

它完全停止工作:

代码语言:javascript
复制
% ./square i
Usage:
  square <x>

% ./square 1
Usage:
  square <x>

在当前的Perl 6中有任何方法可以做到这一点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-08 18:03:24

如果您使用从Str到Complex的Coercive type declaration,它的工作效果要好得多:

代码语言:javascript
复制
sub MAIN(Complex(Str) $x)
{
    say "$x squared is { $x*$x }";
}

然后:

代码语言:javascript
复制
% ./squared.pl 1
1+0i squared is 1+0i
% ./squared.pl 1+2i
1+2i squared is -3+4i
票数 5
EN

Stack Overflow用户

发布于 2016-03-08 18:16:38

实际上,你写的东西效果很好。

代码语言:javascript
复制
$ ./test.pl6 2+3i
2+3i squared is -5+12i

这个问题之所以出现,是因为您实际上并没有在命令行上给它一个Complex号。

代码语言:javascript
复制
$ ./test.pl6 2
Usage:
  ./test.p6 <x> 

您真正想要的是强迫其他Numeric类型使用Complex。因此,您应该编写如下内容。

代码语言:javascript
复制
#!/usr/bin/env perl6

use v6.c;

sub MAIN ( Complex(Real) $x ) {
    say "$x squared is { $x*$x }";
}

我使用的是Real而不是Numeric,因为Complex已经解决了其余的问题。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35872082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档