<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>africwildman (田瑞国)</title>
    <link>https://ruby-china.org/africwildman</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>王银说 Ruby 先后出现过四种类似 lambda 的东西，是哪四种？</title>
      <description>&lt;p&gt;&lt;a href="http://www.yinwang.org/blog-cn/2015/04/03/paradigms/" rel="nofollow" target="_blank"&gt;http://www.yinwang.org/blog-cn/2015/04/03/paradigms/&lt;/a&gt;
这里面说的，Ruby 先后出现过四种类似 lambda 的东西。
惭愧，我只知道两种，proc 和 lambda。&lt;/p&gt;</description>
      <author>africwildman</author>
      <pubDate>Sun, 07 Jun 2015 08:11:36 +0800</pubDate>
      <link>https://ruby-china.org/topics/25914</link>
      <guid>https://ruby-china.org/topics/25914</guid>
    </item>
    <item>
      <title>关于嵌套数组</title>
      <description>&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="no"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,[]&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我以为 a 的结果应该是
[[1,2,3,4,5],[],[],[],[],[]]
结果是
[[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
要得到 [[1,2,3,4,5],[],[],[],[],[]]
需要 a[0]= 1,2,3,4,5
不明白为什么。&lt;/p&gt;</description>
      <author>africwildman</author>
      <pubDate>Thu, 19 Mar 2015 11:53:09 +0800</pubDate>
      <link>https://ruby-china.org/topics/24723</link>
      <guid>https://ruby-china.org/topics/24723</guid>
    </item>
    <item>
      <title>用 TK 编写自定义对话框</title>
      <description>&lt;p&gt;在网上没找到怎么写，根据《tcl/tk 入门》捉摸了半天，感觉应该是这么写：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;#!/usr/bin/ruby&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'tk'&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TestDialog&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;initialize&lt;/span&gt; &lt;span class="n"&gt;parent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kp"&gt;nil&lt;/span&gt;
        &lt;span class="vi"&gt;@b_value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"CANCEL"&lt;/span&gt;
        &lt;span class="vi"&gt;@e_var&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="no"&gt;TkVariable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
        &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="no"&gt;TkToplevel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt; &lt;span class="n"&gt;parent&lt;/span&gt;
        &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;transient&lt;/span&gt;
&lt;span class="c1"&gt;#transient告诉tk该窗口是瞬态窗口，升到最上面。目前我没看出有什么用，没有这句也照常运行。&lt;/span&gt;
        &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="no"&gt;TkEntry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="ss"&gt;:textvariable&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="vi"&gt;@e_var&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;&lt;span class="n"&gt;pack&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;b_ok&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="no"&gt;TkButton&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="ss"&gt;:text&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s2"&gt;"OK"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="ss"&gt;:command&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;proc&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="vi"&gt;@b_value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'OK'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;destroy&lt;/span&gt;&lt;span class="p"&gt;}){&lt;/span&gt;&lt;span class="n"&gt;pack&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;b_cancel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="no"&gt;TkButton&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="ss"&gt;:text&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s2"&gt;"CANCEL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="ss"&gt;:command&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;proc&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="vi"&gt;@b_value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'CANCEL'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;destroy&lt;/span&gt;&lt;span class="p"&gt;}){&lt;/span&gt;&lt;span class="n"&gt;pack&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;grab&lt;/span&gt;
&lt;span class="c1"&gt;#grab使只有本窗口接收焦点，其他窗口不能接收焦点&lt;/span&gt;
        &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;wait_destroy&lt;/span&gt;
&lt;span class="c1"&gt;#wait_destroy等待该窗口销毁，之前我用t.wait，怎么试也不行，一查还有个wait_destroy，然后成了&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;value&lt;/span&gt;
        &lt;span class="vi"&gt;@b_value&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;name&lt;/span&gt;
        &lt;span class="vi"&gt;@e_var&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="no"&gt;TestDialog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
&lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="s2"&gt;"d.value:&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;value&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="s2"&gt;"d.name:&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="no"&gt;Tk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mainloop&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;tk 的控件不能直接输出数据，需要一个变量作代理，这也是我开始时抓狂困惑的地方。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="no"&gt;TkVariable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="no"&gt;TkEntry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:textvariable&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>africwildman</author>
      <pubDate>Sat, 07 Feb 2015 10:46:29 +0800</pubDate>
      <link>https://ruby-china.org/topics/24154</link>
      <guid>https://ruby-china.org/topics/24154</guid>
    </item>
    <item>
      <title>Ruby 为什么要设计成 13/(-3)=-5?</title>
      <description>&lt;p&gt;这样不是容易搞错吗？&lt;/p&gt;</description>
      <author>africwildman</author>
      <pubDate>Mon, 12 Jan 2015 21:56:38 +0800</pubDate>
      <link>https://ruby-china.org/topics/23694</link>
      <guid>https://ruby-china.org/topics/23694</guid>
    </item>
    <item>
      <title>ABC.new (:title=&gt;"title",:flag=&gt;"flag") 用 symbol 做参数是怎么实现的？</title>
      <description>&lt;p&gt;如题。我试了一下搞不出来啊。&lt;/p&gt;</description>
      <author>africwildman</author>
      <pubDate>Wed, 07 Jan 2015 08:36:39 +0800</pubDate>
      <link>https://ruby-china.org/topics/23582</link>
      <guid>https://ruby-china.org/topics/23582</guid>
    </item>
    <item>
      <title>关于 ruby/tk 里面 proc () 的问题</title>
      <description>&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'tk'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'win32ole'&lt;/span&gt;

&lt;span class="vg"&gt;$w&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="no"&gt;WIN32OLE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"excel.application"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="vg"&gt;$workbooks&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="vg"&gt;$w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;workbooks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="s2"&gt;"1.xls"&lt;/span&gt;

&lt;span class="no"&gt;TkButton&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="s2"&gt;"打印"&lt;/span&gt;
    &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="nb"&gt;proc&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="vg"&gt;$workbooks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;class&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}.&lt;/span&gt;&lt;span class="nf"&gt;pack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:fill&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s1"&gt;'x'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="no"&gt;TkButton&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="s2"&gt;"退出"&lt;/span&gt;
    &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="nb"&gt;proc&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="vg"&gt;$w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;quit&lt;/span&gt;
        &lt;span class="nb"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}.&lt;/span&gt;&lt;span class="nf"&gt;pack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:fill&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s1"&gt;'x'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="no"&gt;Tk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mainloop&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上面代码里为什么第一个 button 调用的 proc{print $workbooks.class} 可以运行
第二个 button 调用的
command proc{
        $w.quit
        exit}
}
就出来 NoMethodError: unknown property or method: `quit' ？&lt;/p&gt;</description>
      <author>africwildman</author>
      <pubDate>Thu, 01 Jan 2015 18:30:46 +0800</pubDate>
      <link>https://ruby-china.org/topics/23503</link>
      <guid>https://ruby-china.org/topics/23503</guid>
    </item>
    <item>
      <title>在 windows 下怎么编译 qtruby?</title>
      <description>&lt;p&gt;qt 好上手，资料多，适合我这种业余人士。但 qtruby 好久不更新了，目前没有 ruby2 对应的 windows 二进制版。
我在 win7 ruby2.1.3 cmake 3.0.2 mingw(gcc4.8.1) 环境下编译通不过，用 cmakegui，specify the generator for this project 选 mingw makefiles
编译失败。linux 下是可以编译成功的。
cmakeerror.log:&lt;/p&gt;

&lt;p&gt;Run Build Command:"C:/MinGW/bin/mingw32-make.exe" "cmTryCompileExec610852389/fast"
C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\cmTryCompileExec610852389.dir\build.make CMakeFiles/cmTryCompileExec610852389.dir/build&lt;/p&gt;

&lt;p&gt;mingw32-make.exe[1]: Entering directory 'C:/Users/田瑞国/Downloads/qtruby-4.14.1/build/CMakeFiles/CMakeTmp'&lt;/p&gt;

&lt;p&gt;"C:\Program Files\CMake\bin\cmake.exe" -E cmake_progress_report C:\Users\田瑞国\Downloads\qtruby-4.14.1\build\CMakeFiles\CMakeTmp\CMakeFiles 1&lt;/p&gt;

&lt;p&gt;Building C object CMakeFiles/cmTryCompileExec610852389.dir/testCCompiler.c.obj&lt;/p&gt;

&lt;p&gt;C:\MinGW\bin\gcc.exe    -o CMakeFiles\cmTryCompileExec610852389.dir\testCCompiler.c.obj   -c C:\Users\田瑞国\Downloads\qtruby-4.14.1\build\CMakeFiles\CMakeTmp\testCCompiler.c&lt;/p&gt;

&lt;p&gt;gcc.exe: error: CreateProcess: No such file or directory&lt;/p&gt;

&lt;p&gt;CMakeFiles\cmTryCompileExec610852389.dir\build.make:56: recipe for target 'CMakeFiles/cmTryCompileExec610852389.dir/testCCompiler.c.obj' failed&lt;/p&gt;

&lt;p&gt;mingw32-make.exe[1]: *** [CMakeFiles/cmTryCompileExec610852389.dir/testCCompiler.c.obj] Error 1&lt;/p&gt;

&lt;p&gt;mingw32-make.exe[1]: Leaving directory 'C:/Users/田瑞国/Downloads/qtruby-4.14.1/build/CMakeFiles/CMakeTmp'&lt;/p&gt;

&lt;p&gt;Makefile:117: recipe for target 'cmTryCompileExec610852389/fast' failed&lt;/p&gt;

&lt;p&gt;mingw32-make.exe: *** [cmTryCompileExec610852389/fast] Error 2
大概意思好像是测试临时文件编译没成功，我哪里弄错了？&lt;/p&gt;</description>
      <author>africwildman</author>
      <pubDate>Mon, 27 Oct 2014 22:07:36 +0800</pubDate>
      <link>https://ruby-china.org/topics/22292</link>
      <guid>https://ruby-china.org/topics/22292</guid>
    </item>
    <item>
      <title>操作 WPS 表格时遇到的中文文件名比较的问题</title>
      <description>&lt;p&gt;win7 系统，ruby2.1.3。
有个文件叫"答题卡.xls"，要确认这个文件是否已经打开，写了如下代码：&lt;/p&gt;

&lt;p&gt;require 'win32ole'
et=WIN32OLE.connect "et.application"
wb=et.Workbooks
wb.each{ |w| puts "ok" if w.name=="答题卡.xls" }&lt;/p&gt;

&lt;p&gt;确认文件打开后 w.name=="答题卡.xls" 不能返回 true，改成 w.name=~/答题卡.xls/ 出现如下错误：
clean2.rb:4:in &lt;code&gt;block in &amp;lt;main&amp;gt;': incompatible encoding regexp match (UTF-8 rege
xp with GBK string) (Encoding::CompatibilityError)
        from clean2.rb:4:in&lt;/code&gt;each'
        from clean2.rb:4:in `&lt;/p&gt;'&lt;p&gt;&lt;/p&gt;

&lt;p&gt;我看着是文件系统 GBK 编码跟 ruby2 默认 utf8 冲突问题，怎么解决啊？我目前是把"答题卡.xls"改成英文名。&lt;/p&gt;</description>
      <author>africwildman</author>
      <pubDate>Mon, 27 Oct 2014 17:47:32 +0800</pubDate>
      <link>https://ruby-china.org/topics/22290</link>
      <guid>https://ruby-china.org/topics/22290</guid>
    </item>
  </channel>
</rss>
