次のコードがRubyで何をしているのか、他の言語で同じことができるのか知りたいですか?Rubyコードを解釈する
def func(a)
$i ||= -1
eval %w(1 -1 3 6 1 1 -1 2 4 1)[$i+=1]
end
私が間違っていない場合、$i
はグローバル変数を参照することがわかります。しかし、私は残りが何をしているのか、他のプログラミング言語でこれをどうやってやれるのか分かりません。
次のコードがRubyで何をしているのか、他の言語で同じことができるのか知りたいですか?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
が0の場合は$i
を-1に設定します。そうでない場合は$i
は変更されません。
eval %w(1 -1 3 6 1 1 -1 2 4 1)[$i+=1]
ここにはいくつかの部分があります。
eval
は、提供される文字列のRuby表現を評価します。 eval "5 + 5"
を実行すると、Rubyは文字列を評価して5 + 5
を実行し、10
を返します。%w
は、単語配列を作成するためのRubyショートカットです。与えられた値から文字列の配列を作成します。 %w(testing this)
は[$i+=1]
["testing", "this"]
が%w
によって作成された配列にアクセスしているが返されます。 $i+=1
が評価され、1を加えて$1
とし、配列内のその要素にアクセスします。 $i = -1
があり、["testing", "this"][$i+=1]
を行うと、"testing"
が返されます。 $i
は0になるので、私たちは基本的に["testing", "this"][0]
をした、と0番目の要素は、すべてのすべてでを「テスト」され、どのような機能がないことはあるだろう$私はちょうどゼロかである場合、配列の最初の要素を返します。ただ、アレイからI + 1つの要素を返し、配列あなたが簡単に任意のプログラミング言語でこれを行うことができます ["1", "-1", "3", "6", "1", "1", "-1", "2", "4", "1"]
で次の要素を返します。だから、Pythonでこれを行うには
アップデート1 :
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は確認してくださいので、グローバル変数を使用すると、
は、私が最初の更新にi = None
を追加した3 更新、グローバル変数を定義する必要がグローバル変数にアクセスすることを意味し、危険である
更新4そのまま あなたがアップデート1からコードを実行した場合、それはNone
にi
をリセットし続けるには、次の要素
func(a)
を実行する必要があります0
>>> i = None
>>> func('test')
'1'
>>> func('test')
'-1'
>>> func('test')
'3'
>>> func('test')
'6'
>>> func('test')
'1'
このコードはどのように見えるのですか? – user120931
また、私はなぜi || = -1と言うことができませんか? – user120931
それは私にエラー "グローバル名 '私は定義されていません" – user120931