Ruby on rails 解释Ruby代码
我想知道以下代码在ruby中做了什么,以及是否可以在其他语言中做同样的事情Ruby on rails 解释Ruby代码,ruby-on-rails,syntax,Ruby On Rails,Syntax,我想知道以下代码在ruby中做了什么,以及是否可以在其他语言中做同样的事情 def func(a) $i ||= -1 eval %w(1 -1 3 6 1 1 -1 2 4 1)[$i+=1] end 如果我没有弄错的话,我知道$I引用了全局变量。但我不知道其余的是做什么的,以及如何在其他编程语言中做到这一点 $i ||= -1 这只是设置一个默认值。如果$i为零,它将$i设置为-1,否则$i将保持不变 eval %w(1 -1 3 6 1 1 -1 2 4 1)[$
def func(a)
$i ||= -1
eval %w(1 -1 3 6 1 1 -1 2 4 1)[$i+=1]
end
如果我没有弄错的话,我知道$I
引用了全局变量。但我不知道其余的是做什么的,以及如何在其他编程语言中做到这一点
$i ||= -1
这只是设置一个默认值。如果$i
为零,它将$i
设置为-1,否则$i
将保持不变
eval %w(1 -1 3 6 1 1 -1 2 4 1)[$i+=1]
这里有几个部分
将在提供的字符串中计算Ruby表达式。因此,如果执行eval
,Ruby将计算字符串并运行eval“5+5”
,返回5+5
10
是创建单词数组的Ruby快捷方式。它将根据给定的值创建一个字符串数组<代码>%w(测试此)将返回%w
[“测试”,“此”]
正在访问由[$i+=1]
创建的数组<将计算代码>$i+=1,将1添加到%w
,然后访问数组中的该元素。如果我们有$1
并执行$i=-1
,我们将返回[“测试”,“此”][$i+=1]
“测试”
将变为0,因此我们基本上做了$i
,第0个元素是“测试”[“测试”,“这个”][0]
[“1”、“1”、“3”、“6”、“1”、“1”、“1”、“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
如果按原样执行更新1中的代码,它将继续将i
重置为None
,您需要再次运行func(a)
,以返回下一个元素
>>> i = None
>>> func('test')
'1'
>>> func('test')
'-1'
>>> func('test')
'3'
>>> func('test')
'6'
>>> func('test')
'1'
这只是设置一个默认值。如果$i
为零,它将$i
设置为-1,否则$i
将保持不变
eval %w(1 -1 3 6 1 1 -1 2 4 1)[$i+=1]
这里有几个部分
将在提供的字符串中计算Ruby表达式。因此,如果执行eval
,Ruby将计算字符串并运行eval“5+5”
,返回5+5
10
是创建单词数组的Ruby快捷方式。它将根据给定的值创建一个字符串数组<代码>%w(测试此)将返回%w
[“测试”,“此”]
正在访问由[$i+=1]
创建的数组<将计算代码>$i+=1,将1添加到%w
,然后访问数组中的该元素。如果我们有$1
并执行$i=-1
,我们将返回[“测试”,“此”][$i+=1]
“测试”
将变为0,因此我们基本上做了$i
,第0个元素是“测试”[“测试”,“这个”][0]
[“1”、“1”、“3”、“6”、“1”、“1”、“1”、“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
如果按原样执行更新1中的代码,它将继续将i
重置为None
,您需要再次运行func(a)
,以返回下一个元素
>>> i = None
>>> func('test')
'1'
>>> func('test')
'-1'
>>> func('test')
'3'
>>> func('test')
'6'
>>> func('test')
'1'
还有,为什么我们不能说i | |=-1?这会给我一个错误“全局名称‘i’未定义”,但是python代码只返回第一个元素。第一次调用它时!Ruby代码也将返回第一个元素。再次调用该函数,然后它将返回第二个元素,以此类推,forthI为您添加了另一个更新@user120931,如果你原来的问题已经得到了回答,如果你能接受我的回答那就太好了!还有,为什么我们不能说i | |=-1?这会给我一个错误“全局名称‘i’未定义”,但是python代码只返回第一个元素。第一次调用它时!Ruby代码也将返回第一个元素。再次调用该函数,然后它将返回第二个元素,以此类推,forthI为您添加了另一个更新@user120931,如果你原来的问题已经得到了回答,如果你能接受我的回答那就太好了!