<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>sennmac (SeNMaC)</title>
    <link>https://ruby-china.org/sennmac</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>模块与类的使用规范</title>
      <description>&lt;p&gt;首先看一段 Ruby 代码&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;#定义&lt;/span&gt;
&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;A&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;a&lt;/span&gt;
    &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s1"&gt;'a'&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="c1"&gt;#使用&lt;/span&gt;
&lt;span class="no"&gt;A&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上面可以看到定义了一个 A 模块，然后在被使用时是通过 A 模块来调用 a 这个类方法。
但是我认为模块的从根本上是为了解决&lt;strong&gt;代码复用问题&lt;/strong&gt;而存在，模块&lt;strong&gt;封装了一组被公用的常量/方法/变量，供其他模块/类进行引入&lt;/strong&gt;。
在上面的代码中出现了两个不规范的地方
1.模块中不应该定义类方法，因为模块中的类方法永远无法被 include 成为目标类的类方法，这违反了模块设计的初衷。
2.如果希望某个方法以类方法的形式被调用到，使用 class 进行封装。
请大家给出意见。谢谢。么么哒。
-------update-------
原贴内容有点误人子弟了。
我原本以为 module 从设计上是为了&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;mixin：提供一组方法/变量/常量以便混入其他模块/类。
2.namespace：提供命名空间。
除此之外对 module 的用法都是不规范的。
但是实际上 module 也可以做为 Utility 使用。
在官方的 Math 模块中，便提供了 Math.cos，Math.sqrt 等一系列的辅助方法。&lt;/li&gt;
&lt;/ol&gt;</description>
      <author>sennmac</author>
      <pubDate>Wed, 16 Dec 2015 17:41:26 +0800</pubDate>
      <link>https://ruby-china.org/topics/28412</link>
      <guid>https://ruby-china.org/topics/28412</guid>
    </item>
  </channel>
</rss>
