<!DOCTYPE html >
<html>
        <head>
<link rel="canonical" href="https://ignite.apache.org/releases/2.2.0/scaladoc/scalar/org/apache/ignite/scalar/package.html" />
<META NAME="ROBOTS" CONTENT="NOINDEX">

          <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'/>
<link type='text/css' rel='stylesheet' href='http://agorbatchev.typepad.com/pub/sh/3_0_83/styles/shCore.css'/>
<link type='text/css' rel='stylesheet' href='http://agorbatchev.typepad.com/pub/sh/3_0_83/styles/shThemeDefault.css'/>
<script type='text/javascript' src='http://agorbatchev.typepad.com/pub/sh/3_0_83/scripts/shCore.js'></script>
<script type='text/javascript' src='http://agorbatchev.typepad.com/pub/sh/3_0_83/scripts/shLegacy.js'></script>
<script type='text/javascript' src='http://agorbatchev.typepad.com/pub/sh/3_0_83/scripts/shBrushJava.js'></script>
<script type='text/javascript' src='http://agorbatchev.typepad.com/pub/sh/3_0_83/scripts/shBrushPlain.js'></script>
<script type='text/javascript' src='http://agorbatchev.typepad.com/pub/sh/3_0_83/scripts/shBrushJScript.js'></script>
<script type='text/javascript' src='http://agorbatchev.typepad.com/pub/sh/3_0_83/scripts/shBrushBash.js'></script>
<script type='text/javascript' src='http://agorbatchev.typepad.com/pub/sh/3_0_83/scripts/shBrushXml.js'></script>
<script type='text/javascript' src='http://agorbatchev.typepad.com/pub/sh/3_0_83/scripts/shBrushScala.js'></script>
<script type='text/javascript' src='http://agorbatchev.typepad.com/pub/sh/3_0_83/scripts/shBrushGroovy.js'></script>

<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>


    <table style="padding: 0px 10px 10px 10px; width: 100%" border="0">
                                        <tr>
                                            <td>
                                                <nobr>Ignite&#153; - Scalar DSL, ver. <strong>2.2.0</strong></nobr>
                                                <br>
                                                <a target=_blank href="https://ignite.apache.org"><nobr>2017 Copyright &#169; Apache Software Foundation</nobr></a>
                                            </td>
                                        </tr>
                                        </table><script type='text/javascript'>SyntaxHighlighter.all();dp.SyntaxHighlighter.HighlightAll('code');!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
</body>

      </html>
