Ruby并行分配

jsvisa

我想测试并行分配的返回值,然后编写puts (x, y = 1, 2),但它不起作用,并输出错误消息:

SyntaxError: (irb):74: syntax error, unexpected ',', expecting ')'
puts (x,y =1,2)
    ^
(irb):74: syntax error, unexpected ')', expecting end-of-input

有什么不对的吗?

马克·里德

你有两个问题。

  1. puts之间的空格(可防止括号列表被解释为参数列表。在方法名称后放置空格后,任何参数列表都必须在括号之外,并且所有带括号的部分都必须是合法的表达式。在Ruby中,(x,y,z)它不是合法的单个表达式,因此会出现上述错误。

    如果删除空间,则会得到以下信息:

    > puts(x, y = 1, 2)    
    NameError: undefined local variable or method `x' for main:Object
    

    那是因为你的第二个问题:

  2. 该语句puts(x,y = 1,2)被解析为puts(x, y=1, 2); 也就是说,Ruby将其解释为将三个参数传递给putsx第一个,y=1第二个和2第三个参数。由于x不在分配的左侧,并且尚未定义,因此会出现上述错误。

    使用额外的一组括号将整个分配作为一个参数分组在一起:

    > puts((x,y=1,2))    
    1    
    2    
    

但是请注意,这将传递包含两个项目的单个列表它与并没有区别puts,但是对于区分列表和单个参数的方法而言:

> def foo(a,b) puts "a=#{a},b=#{b}" end
> foo((x,y=1,2))
ArgumentError: wrong number of arguments (1 for 2)

因此,在这种情况下,您还需要标点符号-splat运算符:

> foo(*(x,y=1,2))   
a=1, b=2

有趣的是,但实际上没有实际意义的是,一旦将括号加倍,就可以根据需要放回空格:

> puts ((x, y = 1, 2))    
1    
2    

但是同样,这又使它们从参数包装器变成了一个额外的表达式包装器。您可以在其周围加上任意数量的括号,而无需进行任何更改。这意味着,在这种foo情况下,splat运算符必须走在两组括号之外:

> foo (*(x,y=1,2))
SyntaxError: (irb):24: syntax error, unexpected tSTAR
> foo *((x,y=1,2))
a=1, b=2

但是,在第一个参数本身包含括号的情况下,在Ruby中通常认为使用无括号形式是不好的样式。根据您的Ruby版本,您可能会收到有关此类语句的警告,但是即使您没有这样做,也最好使用完全括号化的版本(方法名称后没有空格)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Ruby并行分配

来自分类Dev

Shell中的并行分配

来自分类Dev

Ruby并行排序

来自分类Dev

迅速:if-let与并行分配

来自分类Dev

Ruby中的并行数组

来自分类Dev

如何在gnu并行中分配变量?

来自分类Dev

Visual Basic分配的并行数组

来自分类Dev

在并行foreach循环中分配

来自分类Dev

python并行分配3个变量

来自分类Dev

Ruby:无法分配内存

来自分类Dev

Ruby对象批量分配

来自分类Dev

Ruby双管道分配

来自分类Dev

如何使用Ruby的Fibers实现并行任务?

来自分类Dev

如何在Ruby命令中并行启动

来自分类Dev

Ruby整数分配-使Ruby分配适应C类型语言

来自分类Dev

Ruby从终端分配多个参数

来自分类Dev

在并行分配中使用下划线作为变量

来自分类Dev

带括号和splat运算符的并行分配

来自分类Dev

可分配数组的Openmp并行工作共享

来自分类Dev

Julia 1.5中带有嵌套循环的并行分配操作

来自分类Dev

如何分配代理以并行运行构建的特定配置?

来自分类Dev

如何在bash中并行分配环境变量

来自分类Dev

GNU并行无法将工作平均分配

来自分类Dev

可分配数组的Openmp并行工作共享

来自分类Dev

Julia 中的并行计算和错误分配的内核数量

来自分类Dev

使用cython和基于FFTW的外部c库并行的“未分配指针,未分配”错误

来自分类Dev

Ruby:如何从数组并行打印字符串

来自分类Dev

Ruby:如何以最简单的方式并行运行任务

来自分类Dev

如何在Ruby中并行运行文件?