<!DOCTYPE html >
<html>
        <head>
<link rel="canonical" href="https://ignite.apache.org/releases/2.9.1/scaladoc/org/apache/ignite/scalar/package.html" />
<META NAME="ROBOTS" CONTENT="NOINDEX">
<!-- Yandex.Metrika counter -->
    <script type="text/javascript" >
      (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
      m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
      (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
    
      ym(72949126, "init", {
           clickmap:true,
           trackLinks:true,
           accurateTrackBounce:true,
           webvisor:true
      });
    </script>
    <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
    <!-- /Yandex.Metrika counter -->
<script type='text/javascript'>
    window.__lo_site_id = 284467;
    
      (function() {
        var wa = document.createElement('script'); wa.type = 'text/javascript'; wa.async = true;
        wa.src = 'https://d10lpsik1i8c69.cloudfront.net/w.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(wa, s);
        })();
      </script>


          <title>scalar - Ignite Scalar - org.apache.ignite.scalar</title>
          <meta name="description" content="scalar - Ignite Scalar - org.apache.ignite.scalar" />
          <meta name="keywords" content="scalar Ignite Scalar org.apache.ignite.scalar" />
          <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
          
      <link href="../../../../lib/template.css" media="screen" type="text/css" rel="stylesheet" />
      <link href="../../../../lib/diagrams.css" media="screen" type="text/css" rel="stylesheet" id="diagrams-css" />
      <script type="text/javascript" src="../../../../lib/jquery.js" id="jquery-js"></script>
      <script type="text/javascript" src="../../../../lib/jquery-ui.js"></script>
      <script type="text/javascript" src="../../../../lib/template.js"></script>
      <script type="text/javascript" src="../../../../lib/tools.tooltip.js"></script>
      
      <script type="text/javascript">
         if(top === self) {
            var url = '../../../../index.html';
            var hash = 'org.apache.ignite.scalar.package';
            var anchor = window.location.hash;
            var anchor_opt = '';
            if (anchor.length >= 1)
              anchor_opt = '@' + anchor.substring(1);
            window.location.href = url + '#' + hash + anchor_opt;
         }
   	  </script>
    
        <link rel='shortcut icon' href='https://ignite.apache.org/favicon.ico'/>

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-61232409-1', 'auto');
  ga('send', 'pageview');

</script></head>

        <body class="value">
      <div id="definition">
        <img alt="Package" src="../../../../lib/package_big.png" />
        <p id="owner"><a href="../../../package.html" class="extype" name="org">org</a>.<a href="../../package.html" class="extype" name="org.apache">apache</a>.<a href="../package.html" class="extype" name="org.apache.ignite">ignite</a></p>
        <h1>scalar</h1><span class="permalink">
      <a href="../../../../index.html#org.apache.ignite.scalar.package" title="Permalink" target="_top">
        <img src="../../../../lib/permalink.png" alt="Permalink" />
      </a>
    </span>
      </div>

      <h4 id="signature" class="signature">
      <span class="modifier_kind">
        <span class="modifier"></span>
        <span class="kind">package</span>
      </span>
      <span class="symbol">
        <span class="name">scalar</span>
      </span>
      </h4>
      
          <div id="comment" class="fullcommenttop"></div>
        

      <div id="mbrsel">
        <div id="textfilter"><span class="pre"></span><span class="input"><input id="mbrsel-input" type="text" accesskey="/" /></span><span class="post"></span></div>
        
        
        <div id="visbl">
            <span class="filtertype">Visibility</span>
            <ol><li class="public in"><span>Public</span></li><li class="all out"><span>All</span></li></ol>
          </div>
      </div>

      <div id="template">
        <div id="allMembers">
        

        <div id="types" class="types members">
              <h3>Type Members</h3>
              <ol><li name="org.apache.ignite.scalar.ScalarConversions" visbl="pub" data-isabs="true" fullComment="yes" group="Ungrouped">
      <a id="ScalarConversionsextendsAnyRef"></a>
      <a id="ScalarConversions:ScalarConversions"></a>
      <h4 class="signature">
      <span class="modifier_kind">
        <span class="modifier"></span>
        <span class="kind">trait</span>
      </span>
      <span class="symbol">
        <a href="ScalarConversions.html"><span class="name">ScalarConversions</span></a><span class="result"> extends <span class="extype" name="scala.AnyRef">AnyRef</span></span>
      </span>
      </h4><span class="permalink">
      <a href="../../../../index.html#org.apache.ignite.scalar.package@ScalarConversionsextendsAnyRef" title="Permalink" target="_top">
        <img src="../../../../lib/permalink.png" alt="Permalink" />
      </a>
    </span>
      <p class="shortcomment cmt">Mixin for <code>scalar</code> object providing <code>implicit</code> and <code>explicit</code> conversions between
Java and Scala Ignite components.</p><div class="fullcomment"><div class="comment cmt"><h4>Overview</h4><p>Mixin for <code>scalar</code> object providing <code>implicit</code> and <code>explicit</code> conversions between
Java and Scala Ignite components.</p><p>It is very important to review this class as it defines what <code>implicit</code> conversions
will take place when using Scalar. Note that object <code>scalar</code> mixes in this
trait and therefore brings with it all implicits into the scope.
</p></div></div>
    </li></ol>
            </div>

        

        <div id="values" class="values members">
              <h3>Value Members</h3>
              <ol><li name="org.apache.ignite.scalar.lang" visbl="pub" data-isabs="false" fullComment="no" group="Ungrouped">
      <a id="lang"></a>
      <a id="lang:lang"></a>
      <h4 class="signature">
      <span class="modifier_kind">
        <span class="modifier"></span>
        <span class="kind">package</span>
      </span>
      <span class="symbol">
        <a href="lang/package.html"><span class="name">lang</span></a>
      </span>
      </h4><span class="permalink">
      <a href="../../../../index.html#org.apache.ignite.scalar.package@lang" title="Permalink" target="_top">
        <img src="../../../../lib/permalink.png" alt="Permalink" />
      </a>
    </span>
      <p class="shortcomment cmt">Contains Scala side adapters for implicits conversion.</p>
    </li><li name="org.apache.ignite.scalar.pimps" visbl="pub" data-isabs="false" fullComment="no" group="Ungrouped">
      <a id="pimps"></a>
      <a id="pimps:pimps"></a>
      <h4 class="signature">
      <span class="modifier_kind">
        <span class="modifier"></span>
        <span class="kind">package</span>
      </span>
      <span class="symbol">
        <a href="pimps/package.html"><span class="name">pimps</span></a>
      </span>
      </h4><span class="permalink">
      <a href="../../../../index.html#org.apache.ignite.scalar.package@pimps" title="Permalink" target="_top">
        <img src="../../../../lib/permalink.png" alt="Permalink" />
      </a>
    </span>
      <p class="shortcomment cmt">Contains Scala &quot;Pimp&quot; implementations for main Ignite entities.</p>
    </li><li name="org.apache.ignite.scalar.scalar" visbl="pub" data-isabs="false" fullComment="yes" group="Ungrouped">
      <a id="scalar"></a>
      <a id="scalar:scalar"></a>
      <h4 class="signature">
      <span class="modifier_kind">
        <span class="modifier"></span>
        <span class="kind">object</span>
      </span>
      <span class="symbol">
        <a href="scalar$.html"><span class="name">scalar</span></a><span class="result"> extends <a href="ScalarConversions.html" class="extype" name="org.apache.ignite.scalar.ScalarConversions">ScalarConversions</a></span>
      </span>
      </h4><span class="permalink">
      <a href="../../../../index.html#org.apache.ignite.scalar.package@scalar" title="Permalink" target="_top">
        <img src="../../../../lib/permalink.png" alt="Permalink" />
      </a>
    </span>
      <p class="shortcomment cmt"></p><div class="fullcomment"><div class="comment cmt"><p></p><pre>________               ______                    ______   _______
__  ___/_____________ ____  /______ _________    __/__ \  __  __ \
_____ \ _  ___/_  __ `/__  / _  __ `/__  ___/    ____/ /  _  / / /
____/ / / /__  / /_/ / _  /  / /_/ / _  /        _  __/___/ /_/ /
/____/  \___/  \__,_/  /_/   \__,_/  /_/         /____/_(_)____/</pre><h4>Overview</h4><p><code>scalar</code> is the main object that encapsulates Scalar DSL. It includes global functions
on &quot;scalar&quot; keyword, helper converters as well as necessary implicit conversions. <code>scalar</code> also
mimics many methods in <code>Ignite</code> class from Java side.</p><p>The idea behind Scalar DSL - <b>zero additional logic and only conversions</b> implemented
using Scala &quot;Pimp&quot; pattern. Note that most of the Scalar DSL development happened on Java
side of Ignite 3.0 product line - Java APIs had to be adjusted quite significantly to
support natural adaptation of functional APIs. That basically means that all functional
logic must be available on Java side and Scalar only provides conversions from Scala
language constructs to Java constructs. Note that currently Ignite supports Scala 2.8
and up only.</p><p>This design approach ensures that Java side does not starve and usage paradigm
is mostly the same between Java and Scala - yet with full power of Scala behind.
In other words, Scalar only adds Scala specifics, but not greatly altering semantics
of how Ignite APIs work. Most of the time the code in Scalar can be written in
Java in almost the same number of lines.</p><h4>Suffix '$' In Names</h4><p>Symbol <code>$</code> is used in names when they conflict with the names in the base Java class
that Scala pimp is shadowing or with Java package name that your Scala code is importing.
Instead of giving two different names to the same function we've decided to simply mark
Scala's side method with <code>$</code> suffix.</p><h4>Importing</h4><p>Scalar needs to be imported in a proper way so that necessary objects and implicit
conversions got available in the scope:
<pre name="code" class="scala">
import org.apache.ignite.scalar._
import scalar._
</pre>
This way you import object <code>scalar</code> as well as all methods declared or inherited in that
object as well.</p><h4>Examples</h4><p>Here are few short examples of how Scalar can be used to program routine distributed
task. All examples below use default Ignite configuration and default grid. All these
examples take an implicit advantage of auto-discovery and failover, load balancing and
collision resolution, zero deployment and many other underlying technologies in the
Ignite - while remaining absolutely distilled to the core domain logic.</p><p>This code snippet prints out full topology:
<pre name="code" class="scala">
scalar {
    grid$ foreach (n => println("Node: " + n.id8))
}
</pre>
The obligatory example - cloud enabled <code>Hello World!</code>. It splits the phrase
into multiple words and prints each word on a separate grid node:
<pre name="code" class="scala">
scalar {
    grid$ *< (SPREAD, (for (w <- "Hello World!".split(" ")) yield () => println(w)))
}
</pre>
This example broadcasts message to all nodes:
<pre name="code" class="scala">
scalar {
    grid$ *< (BROADCAST, () => println("Broadcasting!!!"))
}
</pre>
This example &quot;greets&quot; remote nodes only (note usage of Java-side closure):
<pre name="code" class="scala">
scalar {
    val me = grid$.localNode.id
    grid$.remoteProjection() *< (BROADCAST, F.println("Greetings from: " + me))
}
</pre></p><p>Next example creates a function that calculates lengths of the string
using MapReduce type of processing by splitting the input string into
multiple substrings, calculating each substring length on the remote
node and aggregating results for the final length of the original string:
<pre name="code" class="scala">
def count(msg: String) =
    grid$ @< (SPREAD, for (w <- msg.split(" ")) yield () => w.length, (s: Seq[Int]) => s.sum)
</pre>
This example shows a simple example of how Scalar can be used to work with in-memory data grid:
<pre name="code" class="scala">
scalar {
    val t = cache$[Symbol, Double]("partitioned")
    t += ('symbol -> 2.0)
    t -= ('symbol)
}
</pre>
</p></div></div>
    </li></ol>
            </div>

        

        
        </div>

        <div id="inheritedMembers">
        
        
        </div>

        <div id="groupedMembers">
        <div class="group" name="Ungrouped">
              <h3>Ungrouped</h3>
              
            </div>
        </div>

      </div>

      <div id="tooltip"></div>

      <div id="footer">  </div>


    </body>
      </html>
