我想知道以下代码在ruby中的作用,以及是否可以在其他语言中完成相同的操作?
Users/(my username)/.npm-packages/lib/node_modules/eslint
我知道如果我没有弄错,def func(a)
$i ||= -1
eval %w(1 -1 3 6 1 1 -1 2 4 1)[$i+=1]
end
是指全局变量。但我不知道其余的是什么以及如何用其他编程语言来做到这一点。
答案 0 :(得分:2)
$i ||= -1
这只是设置默认值。如果$i
为零,则会将$i
设置为-1,否则$i
将保持不变。
eval %w(1 -1 3 6 1 1 -1 2 4 1)[$i+=1]
所以这里有几个部分。
eval
将评估提供的String中的Ruby表达式。所以如果你做eval "5 + 5"
,Ruby会评估字符串并运行5 + 5
,返回10
。%w
是用于创建单词数组的Ruby快捷方式。它将根据给定值创建一个字符串数组。 %w(testing this)
将返回["testing", "this"]
[$i+=1]
正在访问%w
创建的数组。将评估$i+=1
,向$1
添加1,然后访问数组中的该元素。如果我们有$i = -1
并执行["testing", "this"][$i+=1]
,我们会返回"testing"
。 $i
将变为0,因此我们基本上["testing", "this"][0]
,第0个元素是“测试”总而言之,如果$ i为nil或者只返回数组中的下一个元素,函数的作用是返回数组中的第一个元素
["1", "-1", "3", "6", "1", "1", "-1", "2", "4", "1"]
您可以使用任何编程语言轻松完成此操作,只需从数组中返回i + 1元素即可。
更新1 所以在Python中这样做:
i = None
def func(a):
global i
if i==None:
i = -1
i = i + 1
return ["1", "-1", "3", "6", "1", "1", "-1", "2", "4", "1"][i]
更新2
在Ruby
中,您使用$
来设置和访问全局变量,在Python中,您必须在函数中声明一个全局变量global
。全局变量很危险,因此Ruby和Python确保您访问全局变量
更新3
我在第一次更新中添加了i = None
,需要定义全局变量
更新4
如果您按原样执行 Update 1 中的代码,它会继续将i
重置为None
,您需要再次运行func(a)
以返回下一个元素
>>> i = None
>>> func('test')
'1'
>>> func('test')
'-1'
>>> func('test')
'3'
>>> func('test')
'6'
>>> func('test')
'1'