0

私の知る限り、コンソールで「プット」を実行するだけなら、この質問をする必要はありません。(しかし、私は何年も訪問してきましたが、最後に私自身、StackOverflow の皆さんに質問します。)

これが私の問題です:

  • ユーザーがクリックすると特定の値に「設定」される変数を作成しようとしています
  • 次に、変更後にその値を表示しようとしています
  • 値を設定できますが、表示されません

(もちろん、Shoes を使用していなければ、これでうまくいくはずです。)

私のコードの関連部分は次のとおりです。

class Inits
# Declares all global vars used
  def init1
    ...
  end
  def initattrib
    @id = "###"
    @name = "name undef"
    alert("Alert: default attrib set")
  end

  def id
    @id
    #alert("Alert: id call")
  end

  def name
    @name
    #alert("Alert: name call")
  end

  def id=(newid)
    @id = newid
    #alert("Alert: id set")
  end

  def name=(newname)
    @name = newname
    #alert("Alert: name set")
  end
end

次に、IDを呼び出して次のように設定しようとしています:

Shoes.app :width => 800, :height => 600, :resizable => false do
  currclass = Inits.new

  currclass.init1
  currclass.initattrib

  .
  .
  .

  id = "123"
  name = "new name"

  # I declare something to click here
  click { currclass.id = id, currclass.name = name }

  # Then I try to display it as so:
  para currclass.id
  para currclass.name

  # But of course the value is not displayed -- just the default value
end

... 余談ですが、クラス変数 (@@x ではなく @x) ではなく、インスタンス変数を使用する必要があると確信しています。

「変更時に更新」できる方法はありますか (「クロックの立ち上がりエッジ」は良い例えです)、またはこれを呼び出す他の方法はありますか?

とにかく、私が正しく行っていないことについてのアドバイスを事前に感謝します。誤解があるのではないでしょうか。

4

2 に答える 2

0

私があなたがしたいことを正しく理解したなら、あなたはそのようにそれをするべきです:

class Cos
attr_accessor :co
def initialize(cos)
@co=cos
end
end
Shoes.app :width => 800, :height => 600, :resizable => false do
 @cosik = Cos.new("ddd")
 @ap=para(@cosik.co)

 button "click" do
  @cosik.co = "oj"
  @ap.text=@cosik.co
 end

end

K

于 2012-05-17T22:45:29.557 に答える
0

靴を使って最初に学ぶことは、メタプログラミングのジャングルです。

Shoes にはデフォルト プロシージャへのフックがあり、クラス作成用のフックもあると確信しているので、Shoes は指定されたクラスに独自の魔法を追加できます。これは、クラス(Shoes.app の外部で定義) が、Shoes.app の内部で定義されている場合と同じように機能する可能性があることを意味します。

Shoes.app ブロック内のすべてを移動してみてください。Shoe.app の外側にあるコードの断片に多くの問題がありました (通常はスコープの問題)。

于 2012-05-17T21:06:25.850 に答える