解释Ruby代码

时间:2016-05-02 22:04:59

标签: ruby-on-rails syntax

我想知道以下代码在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 是指全局变量。但我不知道其余的是什么以及如何用其他编程语言来做到这一点。

1 个答案:

答案 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'