【CoR】ユーザー定義関数内での変数について(CoR質問掲示板

投稿: Human icon mini クソザコ 投稿:2017/03/06 17:04:06(最新:2017/03/07 19:54:07)
scene 'start' do
  a = "ほげ"
  b = "ふが"
  
  preload do 
  end

  create do
  end

  update do
    hoge
  end

  render do
  end
end

start_scene 'start'

def hoge()
  b = a
end

この様なコードでテストプレーをすると

1: start.rb:22: undefined method 'a' for #<RmakeScene:0x5eb168> (NoMethodError)
start.rb:22:in Object.hoge
start.rb:12:in Object#instance_eval
[CoR internal] engine/scene.rb:129:in RmakeScene.call
[CoR internal] engine/scene.rb:126

とエラーが出ますが、(恐らく、関数hoge内で変数aが見えていないという事だと思いますが…)
ユーザー定義関数内でscene do - end内で定義した変数の取得方法はありますか?

コメントする

コメントするには、ログインする必要があります。

コメント一覧

Material 6858 mini akasata(投稿日:2017/03/07 18:08, 履歴)
運営のあかさたです。
やりたいことによって、良い解決方法が変わりそうな話ではありますが・・・

関数の引数で渡すのが良さそうに思います。以下のように書けるかと思います。

scene 'start' do
  a = "ほげ"
  b = "ふが"
  
  preload do 
  end

  create do
    # 「ほげ, ふが」と表示される
    debug_log "#{a}, #{b}"
    
    # 関数呼び出し
    a, b = hoge(a, b)
    
    # 「ほげ, ほげ」と表示される
    debug_log "#{a}, #{b}"
  end

  update do
  end

  render do
  end
end

start_scene 'start'

def hoge(arg_a, arg_b)
  arg_b = arg_a
  
  [arg_a, arg_b]
end

Human icon mini クソザコ(投稿日:2017/03/07 19:54, 履歴)
確かにやりたい事によって変わりますね。
質問の内容が少し説明不足でした、すみません…

自分がやりたい事は「ユーザー定義関数内でscene do - end内で定義した変数の内容を直接書き換える事」ですね。
(上の自分のコードで言うと、関数hogeを実行するだけでbの内容がaの内容に書き換わるようにしたい)
変数の取得方法はわかりましたが、これのやり方がわからないです…