gpt4 book ai didi

ruby - ruby 有 global_variable_set 吗?

转载 作者:数据小太阳 更新时间:2023-10-29 07:35:34 25 4
gpt4 key购买 nike

如果要用 Ruby 制作一个 Tk GUI 并制作多个具有不同全局变量名称的复选框。最有效的方法是什么?

我找到了 instance_variable_set,但这不适合我的场景。

我想知道是否有像 global_variable_set 这样的东西。

例如。

    info = [orange,apple,banana,grape,watermelon]
$var = TkVariable.New
info.each_with_index {|inf,index|
TkCheckButton.new(frame1) do
text "#{inf}"
onvalue "#{inf}"
variable global_variable_set("$var#{index}", inf)
end
end

最佳答案

I wondered if there was such [a] thing as something like a global_variable_set.

是的——它是 Module#module_eval .这是您的代码,经过修改后可以使用它:

require 'tk'

$root = TkRoot.new
$frame1 = Tk::Tile::Frame.new $root

check_buttons = []
info = %w[orange apple banana grape watermelon]
info.each_with_index do |inf,index|
global_name = "$var#{index}"

cb = Tk::Tile::CheckButton.new $frame1
cb.text "#{inf}"
cb.onvalue "#{inf}"

create_global = "#{global_name} = TkVariable.new ''"
Module.module_eval create_global

assign_value = "#{global_name}.value = '#{inf}'"
Module.module_eval assign_value

connect_variable = "cb.variable #{global_name}"
Module.module_eval connect_variable

check_buttons.push cb
end

p Kernel.global_variables.select {|e| e.id2name.start_with? '$var'}
p info.length.times.map {|i| Module.module_eval "$var#{i}.value"}
p check_buttons.map {|e| (e.cget :variable).value}

Tk.mainloop

程序产生以下输出:

[:$var0, :$var1, :$var2, :$var3, :$var4]
["orange", "apple", "banana", "grape", "watermelon"]
["orange", "apple", "banana", "grape", "watermelon"]

或者您可以使用更通用的方法,Kernel#eval相反。

因此,如果动态创建全局变量确实是您想要做的,那么它是可用的。

Checkbutton方法cget的Tcl文档可以看here .

我在 Windows 7 上使用 Ruby 2.2.5 对此进行了测试。

关于ruby - ruby 有 global_variable_set 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38671827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com