2016-05-21 16 views
0

私はこのような単純なのluaスクリプトを持っています。Luaスクリプトはエラーになります()

しかし、私はnewJson宣言をスキップしてにまっすぐに行けば:

local json = redis.call('GET', KEYS[1]) 
if json == false then 
    return nil 
end 
return redis.call('SET', KEYS[1], string.gsub(json, '"isViewed":false', '"isViewed":true', 1)) 

それから私は行く "Redigo" Redisのクライアントからこのエラーを取得する:

ERR Error running script (call to f_3dc195393616dc1f56a13d6c471e0b68b3e4c8b3): @user_script:5: ERR syntax error 

なぜこの出来事はありますか? string.gsubはちょうどこのページに応じた文字列を返している:ネイティブのLua string.gsub戻って2つの値で

https://docs.coronalabs.com/api/library/string/gsub.html

答えて

2

。たぶん、コロナ参照が正しくないのでしょうか?

最初の戻り値は変更された文字列です。 2番目の戻り値は発生した一致の数です。ここ

local newJson = string.gsub(json, '"isViewed":false', '"isViewed":true', 1) 
return redis.call('SET', KEYS[1], newJson) 

あなただけの次の呼び出しでエラーが発生したredis.callするために、両方の戻り値を通過するのに対し、

をrecis.callする最初の戻り値を渡します。

redis.call('SET', KEYS[1], string.gsub(json, '"isViewed":false', '"isViewed":true', 1)) 

あなたが本当に持っているどのように多くの戻り値を参照するprint(string.gsub(json, '"isViewed":false', '"isViewed":true', 1))を試してみてください。

+0

ありがとうございました。 – Alex

+0

@Alex 'redis.call( 'SET'、KEYS [1]、string.gsub(json、 '" isViewed ":false"、 "" isViewed "")を呼び出して、 'newJson'を作成せずに直接結果を渡すことができます: true '、1)、nil) ' – user6245072

+0

最後には何もありませんか? – Alex

関連する問題