sketchucation logo sketchucation
    • 登入
    Oops, your profile's looking a bit empty! To help us tailor your experience, please fill in key details like your SketchUp version, skill level, operating system, and more. Update and save your info on your profile page today!
    🔌 Smart Spline | Fluid way to handle splines for furniture design and complex structures. Download

    This tripped me up (again) today

    已排程 已置頂 已鎖定 已移動 Developers' Forum
    25 貼文 6 Posters 4.3k 瀏覽 6 Watching
    正在載入更多貼文
    • 從舊到新
    • 從新到舊
    • 最多點贊
    回覆
    • 在新貼文中回覆
    登入後回覆
    此主題已被刪除。只有擁有主題管理權限的使用者可以查看。
    • Dan RathbunD 離線
      Dan Rathbun
      最後由 編輯

      @august said:

      I'm using SU 15, which is supposed to have Ruby 2.0 and Dan notes that dclone is in 1.9, so I'm confused.

      What I actually said was that the REXML library (beginning in Ruby 1.9,) modified the Array class, by adding the dclone method.

      In order to use it, you must either precede it's use with:
      require "rexml/document"
      or use a refinement.

      (1) Using the REXML library:
      ` require "rexml/document"

      true
      a = []
      []
      a.respond_to?(:dclone)
      true`

      (2) Refinement module:

      <span class="syntaxdefault"><br />module&nbsp;August<br />&nbsp;&nbsp;module&nbsp;DeepCopy<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;refine&nbsp;</span><span class="syntaxkeyword">Array&nbsp;do<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">def&nbsp;dclone<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;klone&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">self</span><span class="syntaxkeyword">.clone<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">klone</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">clear<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">each</span><span class="syntaxkeyword">{|</span><span class="syntaxdefault">v</span><span class="syntaxkeyword">|&nbsp;</span><span class="syntaxdefault">klone&nbsp;</span><span class="syntaxkeyword"><<&nbsp;</span><span class="syntaxdefault">v</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">dclone</span><span class="syntaxkeyword">}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">klone<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;</span><span class="syntaxcomment">#&nbsp;class&nbsp;Array<br /><br />&nbsp;&nbsp;</span><span class="syntaxdefault">end&nbsp;</span><span class="syntaxcomment">#&nbsp;refinement&nbsp;module&nbsp;DeepCopy<br /></span><span class="syntaxdefault">end&nbsp;</span><span class="syntaxcomment">#&nbsp;Author's&nbsp;namespace<br /><br /><br /></span><span class="syntaxdefault">using&nbsp;August</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">DeepCopy<br /><br />module&nbsp;August<br />&nbsp;&nbsp;module&nbsp;SomePlugin<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span class="syntaxkeyword">=&nbsp;[</span><span class="syntaxstring">"august"</span><span class="syntaxkeyword">,</span><span class="syntaxstring">"dan"</span><span class="syntaxkeyword">,</span><span class="syntaxstring">"tig"</span><span class="syntaxkeyword">]<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">b&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">a</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">dclone<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;puts&nbsp;</span><span class="syntaxstring">"a&nbsp;is;&nbsp;#{a.inspect}"<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">puts&nbsp;</span><span class="syntaxstring">"b&nbsp;is;&nbsp;#{b.inspect}"<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">puts&nbsp;</span><span class="syntaxstring">"changing&nbsp;a[1]&nbsp;to&nbsp;\"bob\""<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">a</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">]=&nbsp;</span><span class="syntaxstring">"bob"<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">puts&nbsp;</span><span class="syntaxstring">"a&nbsp;is;&nbsp;#{a.inspect}"<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">puts&nbsp;</span><span class="syntaxstring">"b&nbsp;is;&nbsp;#{b.inspect}"<br /><br />&nbsp;&nbsp;</span><span class="syntaxdefault">end&nbsp;</span><span class="syntaxcomment">#&nbsp;module&nbsp;SomePlugin<br /></span><span class="syntaxdefault">end&nbsp;</span><span class="syntaxcomment">#&nbsp;Author's&nbsp;namespace<br />&nbsp;</span><span class="syntaxdefault"></span>
      

      Any call to using() must occur within the TOPLEVEL_BINDING.
      This restriction has been removed in later versions of Ruby 2.2+, and the experimental warning that is output on calls to refine has also been removed. (Ie, refinements are no longer experimental and calls to using can happen inside specific module and class scopes.)

      If you want to see that all the elements of the arrays are different objects, you can iterate them and compare their object id numbers.

      I'm not here much anymore.

      1 條回覆 最後回覆 回覆 引用 0
      • A 離線
        August
        最後由 編輯

        Thanks Dan,

        So refine allows me to add my own operators to an existing class? That's a sweet (and dangerous) concept.

        I'll have to put that on the back burner for now. I'm still working on basic Ruby.

        “An idea, like a ghost, must be spoken to a little before it will explain itself.”
        [floatr:v1mcbde2]-- Charles Dickens[/floatr:v1mcbde2]

        1 條回覆 最後回覆 回覆 引用 0
        • Dan RathbunD 離線
          Dan Rathbun
          最後由 編輯

          @august said:

          So refine allows me to add my own operators to an existing class? That's a sweet (and dangerous) concept.

          Refinements do not affect other people's scripts that do not "use" the refinement module. (They are only valid within the file that has the using call.)

          I'm not here much anymore.

          1 條回覆 最後回覆 回覆 引用 0
          • Dan RathbunD 離線
            Dan Rathbun
            最後由 編輯

            Another basic concept is the mixin module, which uses include() and extend().

            In this case, in order to affect only the array you are using, you need to only "extend" the specific array instance object.

            So, assume you have previously loaded a mixin module thus:

            <span class="syntaxdefault">module August<br />  module DeepCopy<br /><br />    def dclone<br />      klone </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> self</span><span class="syntaxkeyword">.clone<br /></span><span class="syntaxdefault">      klone</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">clear<br />      self</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">each</span><span class="syntaxkeyword">{|</span><span class="syntaxdefault">v</span><span class="syntaxkeyword">|</span><span class="syntaxdefault"> klone </span><span class="syntaxkeyword"><<</span><span class="syntaxdefault"> v</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">dclone</span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">      klone<br />    end<br /><br />  end </span><span class="syntaxcomment"># mixin module DeepCopy<br /></span><span class="syntaxdefault">end </span><span class="syntaxcomment"># Author's namespace&nbsp;</span><span class="syntaxdefault"></span>
            

            Then you need to extend a specific array instance:

            <span class="syntaxdefault">a </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[</span><span class="syntaxstring">"august"</span><span class="syntaxkeyword">,</span><span class="syntaxstring">"dan"</span><span class="syntaxkeyword">,</span><span class="syntaxstring">"tig"</span><span class="syntaxkeyword">]<br /><br /></span><span class="syntaxdefault">a</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">extend</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">August</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">DeepCopy</span><span class="syntaxkeyword">)<br /><br /></span><span class="syntaxdefault">b </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> a</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">dclone</span>
            

            I'm not here much anymore.

            1 條回覆 最後回覆 回覆 引用 0
            • A 離線
              August
              最後由 編輯

              Back to TIG's comment about plural vs. singular names for arrays, here is the way I'm naming things. In this context, the singular terms seem to work better for me, probably because I think of it as the mathematical notation P[sub:2dctu78y]0[/sub:2dctu78y], P[sub:2dctu78y]1[/sub:2dctu78y], ... P[sub:2dctu78y]N[/sub:2dctu78y].

              =begin
              
                        point[N]
                                x-------------x point[0]  angle[0] = angle_between vector[N], vector[0]
                                   vector[N]   \
                vector[N] = point[N], point[0]  \
                                                 \
                                        vector[0] \
                    vector[0] = point[0], point[1] \
                                                    x point[1]  angle[1] = angle_between vector[0], vector[1]
                                                   /
                                        vector[1] /
                  vector[1] = point[1], point[2] /
                                                /
                                               /
                                              x point[2]  angle[2] = angle_between vector[1], vector[2]
              
              =end
              

              “An idea, like a ghost, must be spoken to a little before it will explain itself.”
              [floatr:v1mcbde2]-- Charles Dickens[/floatr:v1mcbde2]

              1 條回覆 最後回覆 回覆 引用 0
              • 1
              • 2
              • 2 / 2
              • 第一個貼文
                最後的貼文
              Buy SketchPlus
              Buy SUbD
              Buy WrapR
              Buy eBook
              Buy Modelur
              Buy Vertex Tools
              Buy SketchCuisine
              Buy FormFonts

              Advertisement