Alle sabato 3 marzo 2007, Alan Lake ha scritto: > How does one refer to a tk special variable in Ruby? In Perl, it is > $Tk::<variable>. What tk special variables are available in Ruby? I'm > referring to variables like patchLevel, strictMotif, VERSION and > version. > > In /usr/lib/ruby/1.8/tk.rb, I found TCL_VERSION, TCL_PATCHLEVEL, > TCL_MAJOR_VERSION, TCL_MINOR_VERSION, TK_VERSION, TK_PATCHLEVEL, > TK_MAJOR_VERSION, TK_MINOR_VERSION and JAPANIZED_TK. This may be what > I'm looking for, but these are constants, not variables. > > When I try to refer to them (in irb), but after saying > require 'tk' > I have tried as many different ways as I can... > puts tk::TK_VERSION > puts TK_VERSION > puts TK::TK_VERSION I know nothing of tk, but the constants you looked for are in module Tk, not TK and not tk (which can't be a module name since it doesn't begin with an uppercase character). So, you should do: require 'tk' puts Tk::TK_VERSION ... Looking at the names of the variables you mentioned (keeping in mind that I don't know tk), I think there's a good reason for which they're constants: for instance, TK_VERSION is the version of tk you have on your system, so I can't think of a reason to change them. By the way, to get the names of the constants (including classes and modules) defined in a class or module, you can use the constants method of the Module class. If you call it as a class method of the module class (i.e Module.constants), it will return an array with the top-level constants. If you call it as an instance method of a class / module it will return the names of the constants defined in it. In your case: require 'tk' Module.constants.sort => ["ARGF", "ARGV", "ArgumentError", "Array", ..., "Tk", "TkAfter", ...] This tells you the module you needed is called Tk. To know the constants defined in the Tk module, you can do: Tk.constants.sort => ["AUTO_PATH", "BinaryString", ..., "TK_PATCHLEVEL", "TK_VERSION", ...] I hope this helps Stefano