在Python中,Python有Union类型,当一个方法可以接受多种类型时,这很方便:
from typing import Union
def test(x: Union[str,int,float,]):
print(x)
if __name__ == '__main__':
test(1)
test('str')
test(3.1415926)
Run Code Online (Sandbox Code Playgroud)
Raku 可能没有 Python 那样的 Union 类型,但子句where
可以达到类似的效果:
sub test(\x where * ~~ Int | Str | Rat) {
say(x)
}
sub MAIN() {
test(1);
test('str');
test(3.1415926);
}
Run Code Online (Sandbox Code Playgroud)
我想知道Raku是否有可能像Python一样提供Union类型?
# vvvvvvvvvvvvvvvvvvvv - the Union type doesn't exist in Raku now.
sub test(Union[Int, Str, Rat] \x) {
say(x)
}
Run Code Online (Sandbox Code Playgroud) 一直在玩方法链和CALL-ME
下面是我用来玩的一个玩具类。它CALL-ME
只是调用double
给定值的 Seq 方法。
class Math does Callable
{
method CALL-ME(Iterable:D $i)
{
gather {
$i.map: -> $v { take self.double($v) } ;
}
}
method double($x) { return $x * 2}
}
my $d = Math.new();
Run Code Online (Sandbox Code Playgroud)
首先检查是否可以将Math
对象包含$d
在方法链中。
这段代码
(1,2,3).map( * + 1 ).$d.map( * +1).say;
Run Code Online (Sandbox Code Playgroud)
输出正确的结果
(5 7 9)
Run Code Online (Sandbox Code Playgroud)
现在放入hyper
方法链中
(1,2,3).hyper.map( * + 1 ).$d.map( * + 1 ).say;
Run Code Online (Sandbox Code Playgroud)
这次的输出是
A worker in a parallel iteration (hyper or …
Run Code Online (Sandbox Code Playgroud) 我想使用 shell 变量替换字符串。
\ntoday =`date '+%Y%m%d'`\n\nperl -p -i -e 's/file"20221212"/file="${today}"/g' \n
Run Code Online (Sandbox Code Playgroud)\n期望是file="20221215"
。\n但失败了,结果是file=""
。
如何逃脱这种情况\xef\xbc\x9f
\n代码:
boylist = ['Jim', 'James', 'Jack', 'John', 'Jason']
for i, boylist in enumerate(boylist):
print(f'Index {i} is {boylist} in my list')
#boylist = ['Jim', 'James', 'Jack', 'John', 'Jason']
girllist = ['Emma', 'Clara', 'Susan', 'Jill', 'Lisa']
for boylist, girllist in zip(boylist, girllist):
print(f'{boylist} and {girllist} form a nice couple')\
Run Code Online (Sandbox Code Playgroud)
输出:
Index 0 is Jim in my list
Index 1 is James in my list
Index 2 is Jack in my list
Index 3 is John in my list
Index 4 is Jason …
Run Code Online (Sandbox Code Playgroud)