Skip to content

Instantly share code, notes, and snippets.

@nicerobot
Last active December 10, 2015 03:28
Show Gist options
  • Select an option

  • Save nicerobot/4374647 to your computer and use it in GitHub Desktop.

Select an option

Save nicerobot/4374647 to your computer and use it in GitHub Desktop.
Scala Cheat Sheet :Gish
<!DOCTYPE html>
<!-- saved from url=(0039)http://docs.scala-lang.org/cheatsheets/ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Scalacheat - Scala Documentation</title>
<link rel="icon" type="image/png" href="http://docs.scala-lang.org/resources/favicon.ico">
<style type="text/css">
html, body {
margin: 0;
padding: 0;
padding-top: 40px;
}
h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, cite, code, del, dfn, em, img, q, s, samp, small, strike, strong, sub, sup, tt, var, dd, dl, dt, li, ol, ul, fieldset, form, label, legend, button, table, caption, tbody, tfoot, thead, tr, th, td {
margin: 0;
padding: 0;
border: 0;
font-weight: normal;
font-style: normal;
font-size: 100%;
line-height: 1;
font-family: inherit;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
ol, ul {
list-style: none;
}
q:before, q:after, blockquote:before, blockquote:after {
content: "";
}
html {
overflow-y: scroll;
font-size: 100%;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
}
a:focus {
outline: thin dotted;
}
a:hover, a:active {
outline: 0;
}
article, aside, details, figcaption, figure, footer, header, hgroup, nav, section {
display: block;
}
audio, canvas, video {
display: inline-block;
*display: inline;
*zoom: 1;
}
audio:not([controls]) {
display: none;
}
sub, sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
img {
border: 0;
-ms-interpolation-mode: bicubic;
}
button, input, select, textarea {
font-size: 100%;
margin: 0;
vertical-align: baseline;
*vertical-align: middle;
}
button, input {
line-height: normal;
*overflow: visible;
}
button::-moz-focus-inner, input::-moz-focus-inner {
border: 0;
padding: 0;
}
button, input[type="button"], input[type="reset"], input[type="submit"] {
cursor: pointer;
-webkit-appearance: button;
}
input[type="search"] {
-webkit-appearance: textfield;
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
textarea {
overflow: auto;
vertical-align: top;
}
html, body {
background-color: #ffffff;
}
body {
margin: 0;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 13px;
font-weight: normal;
line-height: 18px;
color: #404040;
}
.container {
width: 940px;
margin-left: auto;
margin-right: auto;
zoom: 1;
}
.container:before, .container:after {
display: table;
content: "";
zoom: 1;
*display: inline;
}
.container:after {
clear: both;
}
a {
color: #0069d6;
text-decoration: none;
line-height: inherit;
font-weight: inherit;
}
a:hover {
color: #00438a;
text-decoration: underline;
}
.pull-right {
float: right;
}
.pull-left {
float: left;
}
.hide {
display: none;
}
.show {
display: block;
}
.row {
zoom: 1;
margin-left: -20px;
}
.row:before, .row:after {
display: table;
content: "";
zoom: 1;
*display: inline;
}
.row:after {
clear: both;
}
[class*="span"] {
display: inline;
float: left;
margin-left: 20px;
}
.span1 {
width: 40px;
}
.span2 {
width: 100px;
}
.span3 {
width: 160px;
}
.span4 {
width: 220px;
}
.span5 {
width: 280px;
}
.span6 {
width: 340px;
}
.span7 {
width: 400px;
}
.span8 {
width: 460px;
}
.span9 {
width: 520px;
}
.span10 {
width: 580px;
}
.span11 {
width: 640px;
}
.span12 {
width: 700px;
}
.span13 {
width: 760px;
}
.span14 {
width: 820px;
}
.span15 {
width: 880px;
}
.span16 {
width: 940px;
}
.span17 {
width: 1000px;
}
.span18 {
width: 1060px;
}
.span19 {
width: 1120px;
}
.span20 {
width: 1180px;
}
.span21 {
width: 1240px;
}
.span22 {
width: 1300px;
}
.span23 {
width: 1360px;
}
.span24 {
width: 1420px;
}
.offset1 {
margin-left: 80px;
}
.offset2 {
margin-left: 140px;
}
.offset3 {
margin-left: 200px;
}
.offset4 {
margin-left: 260px;
}
.offset5 {
margin-left: 320px;
}
.offset6 {
margin-left: 380px;
}
.offset7 {
margin-left: 440px;
}
.offset8 {
margin-left: 500px;
}
.offset9 {
margin-left: 560px;
}
.offset10 {
margin-left: 620px;
}
.offset11 {
margin-left: 680px;
}
.offset12 {
margin-left: 740px;
}
.span-one-third {
width: 300px;
}
.span-two-thirds {
width: 620px;
}
.offset-one-third {
margin-left: 340px;
}
.offset-two-thirds {
margin-left: 660px;
}
p {
font-size: 13px;
font-weight: normal;
line-height: 18px;
margin-bottom: 9px;
}
p small {
font-size: 11px;
color: #bfbfbf;
}
h1, h2, h3, h4, h5, h6 {
font-weight: bold;
color: #404040;
}
h1 small, h2 small, h3 small, h4 small, h5 small, h6 small {
color: #bfbfbf;
}
h1 {
margin-bottom: 18px;
font-size: 30px;
line-height: 36px;
}
h1 small {
font-size: 18px;
}
h2 {
font-size: 24px;
line-height: 36px;
}
h2 small {
font-size: 14px;
}
h3, h4, h5, h6 {
line-height: 36px;
}
h3 {
font-size: 18px;
}
h3 small {
font-size: 14px;
}
h4 {
font-size: 16px;
}
h4 small {
font-size: 12px;
}
h5 {
font-size: 14px;
}
h6 {
font-size: 13px;
color: #bfbfbf;
text-transform: uppercase;
}
ul, ol {
margin: 0 0 18px 25px;
}
ul ul, ul ol, ol ol, ol ul {
margin-bottom: 0;
}
ul {
list-style: disc;
}
ol {
list-style: decimal;
}
li {
line-height: 18px;
color: #808080;
}
ul.unstyled {
list-style: none;
margin-left: 0;
}
dl {
margin-bottom: 18px;
}
dl dt, dl dd {
line-height: 18px;
}
dl dt {
font-weight: bold;
}
dl dd {
margin-left: 9px;
}
hr {
margin: 20px 0 19px;
border: 0;
border-bottom: 1px solid #eee;
}
strong {
font-style: inherit;
font-weight: bold;
}
em {
font-style: italic;
font-weight: inherit;
line-height: inherit;
}
.muted {
color: #bfbfbf;
}
blockquote {
margin-bottom: 18px;
border-left: 5px solid #eee;
padding-left: 15px;
}
blockquote p {
font-size: 14px;
font-weight: 300;
line-height: 18px;
margin-bottom: 0;
}
blockquote small {
display: block;
font-size: 12px;
font-weight: 300;
line-height: 18px;
color: #bfbfbf;
}
blockquote small:before {
content: '\2014 \00A0';
}
address {
display: block;
line-height: 18px;
margin-bottom: 18px;
}
code, pre {
padding: 0 3px 2px;
font-family: Monaco, Andale Mono, Courier New, monospace;
font-size: 12px;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
code {
color: rgba(0, 0, 0, 0.75);
padding: 1px 3px;
}
pre {
background-color: #f5f5f5;
display: block;
padding: 8.5px;
margin: 0 0 18px;
line-height: 18px;
font-size: 12px;
border: 1px solid #ccc;
border: 1px solid rgba(0, 0, 0, 0.15);
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
white-space: pre;
white-space: pre-wrap;
word-wrap: break-word;
}
form {
margin-bottom: 18px;
}
fieldset {
margin-bottom: 18px;
padding-top: 18px;
}
fieldset legend {
display: block;
padding-left: 150px;
font-size: 19.5px;
line-height: 1;
color: #404040;
*padding: 0 0 5px 145px;
*line-height: 1.5;
}
form .clearfix {
margin-bottom: 18px;
zoom: 1;
}
form .clearfix:before, form .clearfix:after {
display: table;
content: "";
zoom: 1;
*display: inline;
}
form .clearfix:after {
clear: both;
}
label, input, select, textarea {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 13px;
font-weight: normal;
line-height: normal;
}
label {
padding-top: 6px;
font-size: 13px;
line-height: 18px;
float: left;
width: 130px;
text-align: right;
color: #404040;
}
form .input {
margin-left: 150px;
}
input[type=checkbox], input[type=radio] {
cursor: pointer;
}
input, textarea, select, .uneditable-input {
display: inline-block;
width: 210px;
height: 18px;
padding: 4px;
font-size: 13px;
line-height: 18px;
color: #808080;
border: 1px solid #ccc;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
input[type=checkbox], input[type=radio] {
width: auto;
height: auto;
padding: 0;
margin: 3px 0;
*margin-top: 0;
line-height: normal;
border: none;
}
input[type=file] {
background-color: #ffffff;
padding: initial;
border: initial;
line-height: initial;
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}
input[type=button], input[type=reset], input[type=submit] {
width: auto;
height: auto;
}
select, input[type=file] {
height: 27px;
line-height: 27px;
*margin-top: 4px;
}
select[multiple] {
height: inherit;
}
textarea {
height: auto;
}
.uneditable-input {
background-color: #ffffff;
display: block;
border-color: #eee;
-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
-moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
cursor: not-allowed;
}
:-moz-placeholder {
color: #bfbfbf;
}
::-webkit-input-placeholder {
color: #bfbfbf;
}
input, textarea {
-webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
-moz-transition: border linear 0.2s, box-shadow linear 0.2s;
-ms-transition: border linear 0.2s, box-shadow linear 0.2s;
-o-transition: border linear 0.2s, box-shadow linear 0.2s;
transition: border linear 0.2s, box-shadow linear 0.2s;
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
-moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
}
input:focus, textarea:focus {
outline: 0;
border-color: rgba(82, 168, 236, 0.8);
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
-moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6);
}
input[type=file]:focus, input[type=checkbox]:focus, select:focus {
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
outline: 1px dotted #666;
}
form div.clearfix.error {
background: #fae5e3;
padding: 10px 0;
margin: -10px 0 10px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
form div.clearfix.error>label, form div.clearfix.error span.help-inline, form div.clearfix.error span.help-block {
color: #9d261d;
}
form div.clearfix.error input, form div.clearfix.error textarea {
border-color: #c87872;
-webkit-box-shadow: 0 0 3px rgba(171, 41, 32, 0.25);
-moz-box-shadow: 0 0 3px rgba(171, 41, 32, 0.25);
box-shadow: 0 0 3px rgba(171, 41, 32, 0.25);
}
form div.clearfix.error input:focus, form div.clearfix.error textarea:focus {
border-color: #b9554d;
-webkit-box-shadow: 0 0 6px rgba(171, 41, 32, 0.5);
-moz-box-shadow: 0 0 6px rgba(171, 41, 32, 0.5);
box-shadow: 0 0 6px rgba(171, 41, 32, 0.5);
}
form div.clearfix.error .input-prepend span.add-on, form div.clearfix.error .input-append span.add-on {
background: #f4c8c5;
border-color: #c87872;
color: #b9554d;
}
.input-mini, input.mini, textarea.mini, select.mini {
width: 60px;
}
.input-small, input.small, textarea.small, select.small {
width: 90px;
}
.input-medium, input.medium, textarea.medium, select.medium {
width: 150px;
}
.input-large, input.large, textarea.large, select.large {
width: 210px;
}
.input-xlarge, input.xlarge, textarea.xlarge, select.xlarge {
width: 270px;
}
.input-xxlarge, input.xxlarge, textarea.xxlarge, select.xxlarge {
width: 530px;
}
textarea.xxlarge {
overflow-y: auto;
}
input.span1, textarea.span1, select.span1 {
display: inline-block;
float: none;
width: 30px;
margin-left: 0;
}
input.span2, textarea.span2, select.span2 {
display: inline-block;
float: none;
width: 90px;
margin-left: 0;
}
input.span3, textarea.span3, select.span3 {
display: inline-block;
float: none;
width: 150px;
margin-left: 0;
}
input.span4, textarea.span4, select.span4 {
display: inline-block;
float: none;
width: 210px;
margin-left: 0;
}
input.span5, textarea.span5, select.span5 {
display: inline-block;
float: none;
width: 270px;
margin-left: 0;
}
input.span6, textarea.span6, select.span6 {
display: inline-block;
float: none;
width: 330px;
margin-left: 0;
}
input.span7, textarea.span7, select.span7 {
display: inline-block;
float: none;
width: 390px;
margin-left: 0;
}
input.span8, textarea.span8, select.span8 {
display: inline-block;
float: none;
width: 450px;
margin-left: 0;
}
input.span9, textarea.span9, select.span9 {
display: inline-block;
float: none;
width: 510px;
margin-left: 0;
}
input.span10, textarea.span10, select.span10 {
display: inline-block;
float: none;
width: 570px;
margin-left: 0;
}
input.span11, textarea.span11, select.span11 {
display: inline-block;
float: none;
width: 630px;
margin-left: 0;
}
input.span12, textarea.span12, select.span12 {
display: inline-block;
float: none;
width: 690px;
margin-left: 0;
}
input.span13, textarea.span13, select.span13 {
display: inline-block;
float: none;
width: 750px;
margin-left: 0;
}
input.span14, textarea.span14, select.span14 {
display: inline-block;
float: none;
width: 810px;
margin-left: 0;
}
input.span15, textarea.span15, select.span15 {
display: inline-block;
float: none;
width: 870px;
margin-left: 0;
}
input.span16, textarea.span16, select.span16 {
display: inline-block;
float: none;
width: 930px;
margin-left: 0;
}
input[disabled], select[disabled], textarea[disabled], input[readonly], select[readonly], textarea[readonly] {
background-color: #f5f5f5;
border-color: #ddd;
cursor: not-allowed;
}
.actions {
background: #f5f5f5;
margin-top: 18px;
margin-bottom: 18px;
padding: 17px 20px 18px 150px;
border-top: 1px solid #ddd;
-webkit-border-radius: 0 0 3px 3px;
-moz-border-radius: 0 0 3px 3px;
border-radius: 0 0 3px 3px;
}
.actions .secondary-action {
float: right;
}
.actions .secondary-action a {
line-height: 30px;
}
.actions .secondary-action a:hover {
text-decoration: underline;
}
.help-inline, .help-block {
font-size: 11px;
line-height: 18px;
color: #bfbfbf;
}
.help-inline {
padding-left: 5px;
*position: relative;
*top: -5px;
}
.help-block {
display: block;
max-width: 600px;
}
.inline-inputs {
color: #808080;
}
.inline-inputs span, .inline-inputs input {
display: inline-block;
}
.inline-inputs input.mini {
width: 60px;
}
.inline-inputs input.small {
width: 90px;
}
.inline-inputs span {
padding: 0 2px 0 1px;
}
.input-prepend input, .input-append input {
-webkit-border-radius: 0 3px 3px 0;
-moz-border-radius: 0 3px 3px 0;
border-radius: 0 3px 3px 0;
}
.input-prepend .add-on, .input-append .add-on {
position: relative;
background: #f5f5f5;
border: 1px solid #ccc;
z-index: 2;
float: left;
display: block;
width: auto;
min-width: 16px;
height: 18px;
padding: 4px 4px 4px 5px;
margin-right: -1px;
font-weight: normal;
line-height: 18px;
color: #bfbfbf;
text-align: center;
text-shadow: 0 1px 0 #ffffff;
-webkit-border-radius: 3px 0 0 3px;
-moz-border-radius: 3px 0 0 3px;
border-radius: 3px 0 0 3px;
}
.input-prepend .active, .input-append .active {
background: #a9dba9;
border-color: #46a546;
}
.input-prepend .add-on {
*margin-top: 1px;
}
.input-append input {
float: left;
-webkit-border-radius: 3px 0 0 3px;
-moz-border-radius: 3px 0 0 3px;
border-radius: 3px 0 0 3px;
}
.input-append .add-on {
-webkit-border-radius: 0 3px 3px 0;
-moz-border-radius: 0 3px 3px 0;
border-radius: 0 3px 3px 0;
margin-right: 0;
margin-left: -1px;
}
.inputs-list {
margin: 0 0 5px;
width: 100%;
}
.inputs-list li {
display: block;
padding: 0;
width: 100%;
}
.inputs-list label {
display: block;
float: none;
width: auto;
padding: 0;
line-height: 18px;
text-align: left;
white-space: normal;
}
.inputs-list label strong {
color: #808080;
}
.inputs-list label small {
font-size: 11px;
font-weight: normal;
}
.inputs-list .inputs-list {
margin-left: 25px;
margin-bottom: 10px;
padding-top: 0;
}
.inputs-list:first-child {
padding-top: 6px;
}
.inputs-list li+li {
padding-top: 2px;
}
.inputs-list input[type=radio], .inputs-list input[type=checkbox] {
margin-bottom: 0;
}
.form-stacked {
padding-left: 20px;
}
.form-stacked fieldset {
padding-top: 9px;
}
.form-stacked legend {
padding-left: 0;
}
.form-stacked label {
display: block;
float: none;
width: auto;
font-weight: bold;
text-align: left;
line-height: 20px;
padding-top: 0;
}
.form-stacked .clearfix {
margin-bottom: 9px;
}
.form-stacked .clearfix div.input {
margin-left: 0;
}
.form-stacked .inputs-list {
margin-bottom: 0;
}
.form-stacked .inputs-list li {
padding-top: 0;
}
.form-stacked .inputs-list li label {
font-weight: normal;
padding-top: 0;
}
.form-stacked div.clearfix.error {
padding-top: 10px;
padding-bottom: 10px;
padding-left: 10px;
margin-top: 0;
margin-left: -10px;
}
.form-stacked .actions {
margin-left: -20px;
padding-left: 20px;
}
table {
width: 100%;
margin-bottom: 18px;
padding: 0;
border-collapse: separate;
*border-collapse: collapse;
font-size: 13px;
border: 1px solid #ddd;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
table th, table td {
padding: 10px 10px 9px;
line-height: 18px;
text-align: left;
}
table th {
padding-top: 9px;
font-weight: bold;
vertical-align: middle;
border-bottom: 1px solid #ddd;
}
table td {
vertical-align: top;
}
table th+th, table td+td {
border-left: 1px solid #ddd;
}
table tr+tr td {
border-top: 1px solid #ddd;
}
table tbody tr:first-child td:first-child {
-webkit-border-radius: 4px 0 0 0;
-moz-border-radius: 4px 0 0 0;
border-radius: 4px 0 0 0;
}
table tbody tr:first-child td:last-child {
-webkit-border-radius: 0 4px 0 0;
-moz-border-radius: 0 4px 0 0;
border-radius: 0 4px 0 0;
}
table tbody tr:last-child td:first-child {
-webkit-border-radius: 0 0 0 4px;
-moz-border-radius: 0 0 0 4px;
border-radius: 0 0 0 4px;
}
table tbody tr:last-child td:last-child {
-webkit-border-radius: 0 0 4px 0;
-moz-border-radius: 0 0 4px 0;
border-radius: 0 0 4px 0;
}
.zebra-striped tbody tr:nth-child(odd) td {
background-color: #f9f9f9;
}
.zebra-striped tbody tr:hover td {
background-color: #f5f5f5;
}
table .header {
cursor: pointer;
}
table .header:after {
content: "";
float: right;
margin-top: 7px;
border-width: 0 4px 4px;
border-style: solid;
border-color: #000 transparent;
visibility: hidden;
}
table .headerSortUp, table .headerSortDown {
background-color: rgba(141, 192, 219, 0.25);
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
}
table .header:hover:after {
visibility: visible;
}
table .headerSortDown:after, table .headerSortDown:hover:after {
visibility: visible;
filter: alpha(opacity = 60);
-khtml-opacity: 0.6;
-moz-opacity: 0.6;
opacity: 0.6;
}
table .headerSortUp:after {
border-bottom: none;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 4px solid #000;
visibility: visible;
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
filter: alpha(opacity = 60);
-khtml-opacity: 0.6;
-moz-opacity: 0.6;
opacity: 0.6;
}
table .blue {
color: #049cdb;
border-bottom-color: #049cdb;
}
table .headerSortUp.blue, table .headerSortDown.blue {
background-color: #ade6fe;
}
table .green {
color: #46a546;
border-bottom-color: #46a546;
}
table .headerSortUp.green, table .headerSortDown.green {
background-color: #cdeacd;
}
table .red {
color: #9d261d;
border-bottom-color: #9d261d;
}
table .headerSortUp.red, table .headerSortDown.red {
background-color: #f4c8c5;
}
table .yellow {
color: #ffc40d;
border-bottom-color: #ffc40d;
}
table .headerSortUp.yellow, table .headerSortDown.yellow {
background-color: #fff6d9;
}
table .orange {
color: #f89406;
border-bottom-color: #f89406;
}
table .headerSortUp.orange, table .headerSortDown.orange {
background-color: #fee9cc;
}
table .purple {
color: #7a43b6;
border-bottom-color: #7a43b6;
}
table .headerSortUp.purple, table .headerSortDown.purple {
background-color: #e2d5f0;
}
.topbar {
height: 40px;
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 10000;
overflow: visible;
}
.topbar a {
color: #bfbfbf;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.topbar h3 a:hover, .topbar .brand a:hover, .topbar ul .active>a {
background-color: #333;
background-color: rgba(255, 255, 255, 0.05);
color: #ffffff;
text-decoration: none;
}
.topbar h3 {
position: relative;
}
.topbar h3 a, .topbar .brand {
float: left;
display: block;
padding: 8px 20px 12px;
margin-left: -20px;
color: #ffffff;
font-size: 20px;
font-weight: 200;
line-height: 1;
}
.topbar p {
margin: 0;
line-height: 40px;
}
.topbar p a:hover {
background-color: transparent;
color: #ffffff;
}
.topbar form {
float: left;
margin: 5px 0 0 0;
position: relative;
filter: alpha(opacity = 100);
-khtml-opacity: 1;
-moz-opacity: 1;
opacity: 1;
}
.topbar form.pull-right {
float: right;
}
.topbar input {
background-color: #444;
background-color: rgba(255, 255, 255, 0.3);
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: normal;
font-weight: 13px;
line-height: 1;
padding: 4px 9px;
color: #ffffff;
color: rgba(255, 255, 255, 0.75);
border: 1px solid #111;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.25);
-moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.25);
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.25);
-webkit-transition: none;
-moz-transition: none;
-ms-transition: none;
-o-transition: none;
transition: none;
}
.topbar input:-moz-placeholder {
color: #e6e6e6;
}
.topbar input::-webkit-input-placeholder {
color: #e6e6e6;
}
.topbar input:hover {
background-color: #bfbfbf;
background-color: rgba(255, 255, 255, 0.5);
color: #ffffff;
}
.topbar input:focus, .topbar input.focused {
outline: 0;
background-color: #ffffff;
color: #404040;
text-shadow: 0 1px 0 #ffffff;
border: 0;
padding: 5px 10px;
-webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
-moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
}
.topbar-inner, .topbar .fill {
background-color: #222;
background-color: #222222;
background-repeat: repeat-x;
background-image: -khtml-gradient(linear, left top, left bottom, from(#333333), to(#222222));
background-image: -moz-linear-gradient(top, #333333, #222222);
background-image: -ms-linear-gradient(top, #333333, #222222);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #333333), color-stop(100%, #222222));
background-image: -webkit-linear-gradient(top, #333333, #222222);
background-image: -o-linear-gradient(top, #333333, #222222);
background-image: linear-gradient(top, #333333, #222222);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#333333', endColorstr = '#222222', GradientType = 0);
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
}
.topbar div>ul, .nav {
display: block;
float: left;
margin: 0 10px 0 0;
position: relative;
left: 0;
}
.topbar div>ul>li, .nav>li {
display: block;
float: left;
}
.topbar div>ul a, .nav a {
display: block;
float: none;
padding: 10px 10px 11px;
line-height: 19px;
text-decoration: none;
}
.topbar div>ul a:hover, .nav a:hover {
color: #ffffff;
text-decoration: none;
}
.topbar div>ul .active>a, .nav .active>a {
background-color: #222;
background-color: rgba(0, 0, 0, 0.5);
}
.topbar div>ul.secondary-nav, .nav.secondary-nav {
float: right;
margin-left: 10px;
margin-right: 0;
}
.topbar div>ul.secondary-nav .menu-dropdown, .nav.secondary-nav .menu-dropdown, .topbar div>ul.secondary-nav .dropdown-menu, .nav.secondary-nav .dropdown-menu {
right: 0;
border: 0;
}
.topbar div>ul a.menu:hover, .nav a.menu:hover, .topbar div>ul li.open .menu, .nav li.open .menu, .topbar div>ul .dropdown-toggle:hover, .nav .dropdown-toggle:hover, .topbar div>ul .dropdown.open .dropdown-toggle, .nav .dropdown.open .dropdown-toggle {
background: #444;
background: rgba(255, 255, 255, 0.05);
}
.topbar div>ul .menu-dropdown, .nav .menu-dropdown, .topbar div>ul .dropdown-menu, .nav .dropdown-menu {
background-color: #333;
}
.topbar div>ul .menu-dropdown a.menu, .nav .menu-dropdown a.menu, .topbar div>ul .dropdown-menu a.menu, .nav .dropdown-menu a.menu, .topbar div>ul .menu-dropdown .dropdown-toggle, .nav .menu-dropdown .dropdown-toggle, .topbar div>ul .dropdown-menu .dropdown-toggle, .nav .dropdown-menu .dropdown-toggle {
color: #ffffff;
}
.topbar div>ul .menu-dropdown a.menu.open, .nav .menu-dropdown a.menu.open, .topbar div>ul .dropdown-menu a.menu.open, .nav .dropdown-menu a.menu.open, .topbar div>ul .menu-dropdown .dropdown-toggle.open, .nav .menu-dropdown .dropdown-toggle.open, .topbar div>ul .dropdown-menu .dropdown-toggle.open, .nav .dropdown-menu .dropdown-toggle.open {
background: #444;
background: rgba(255, 255, 255, 0.05);
}
.topbar div>ul .menu-dropdown li a, .nav .menu-dropdown li a, .topbar div>ul .dropdown-menu li a, .nav .dropdown-menu li a {
color: #999;
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5);
}
.topbar div>ul .menu-dropdown li a:hover, .nav .menu-dropdown li a:hover, .topbar div>ul .dropdown-menu li a:hover, .nav .dropdown-menu li a:hover {
background-color: #191919;
background-repeat: repeat-x;
background-image: -khtml-gradient(linear, left top, left bottom, from(#292929), to(#191919));
background-image: -moz-linear-gradient(top, #292929, #191919);
background-image: -ms-linear-gradient(top, #292929, #191919);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #292929), color-stop(100%, #191919));
background-image: -webkit-linear-gradient(top, #292929, #191919);
background-image: -o-linear-gradient(top, #292929, #191919);
background-image: linear-gradient(top, #292929, #191919);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#292929', endColorstr = '#191919', GradientType = 0);
color: #ffffff;
}
.topbar div>ul .menu-dropdown .active a, .nav .menu-dropdown .active a, .topbar div>ul .dropdown-menu .active a, .nav .dropdown-menu .active a {
color: #ffffff;
}
.topbar div>ul .menu-dropdown .divider, .nav .menu-dropdown .divider, .topbar div>ul .dropdown-menu .divider, .nav .dropdown-menu .divider {
background-color: #222;
border-color: #444;
}
.topbar ul .menu-dropdown li a, .topbar ul .dropdown-menu li a {
padding: 4px 15px;
}
li.menu, .dropdown {
position: relative;
}
a.menu:after, .dropdown-toggle:after {
width: 0;
height: 0;
display: inline-block;
content: "&darr;";
text-indent: -99999px;
vertical-align: top;
margin-top: 8px;
margin-left: 4px;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 4px solid #ffffff;
filter: alpha(opacity = 50);
-khtml-opacity: 0.5;
-moz-opacity: 0.5;
opacity: 0.5;
}
.menu-dropdown, .dropdown-menu {
background-color: #ffffff;
float: left;
display: none;
position: absolute;
top: 40px;
z-index: 900;
min-width: 160px;
max-width: 220px;
_width: 160px;
margin-left: 0;
margin-right: 0;
padding: 6px 0;
zoom: 1;
border-color: #999;
border-color: rgba(0, 0, 0, 0.2);
border-style: solid;
border-width: 0 1px 1px;
-webkit-border-radius: 0 0 6px 6px;
-moz-border-radius: 0 0 6px 6px;
border-radius: 0 0 6px 6px;
-webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
-moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
-webkit-background-clip: padding-box;
-moz-background-clip: padding-box;
background-clip: padding-box;
}
.menu-dropdown li, .dropdown-menu li {
float: none;
display: block;
background-color: none;
}
.menu-dropdown .divider, .dropdown-menu .divider {
height: 1px;
margin: 5px 0;
overflow: hidden;
background-color: #eee;
border-bottom: 1px solid #ffffff;
}
.topbar .dropdown-menu a, .dropdown-menu a {
display: block;
padding: 4px 15px;
clear: both;
font-weight: normal;
line-height: 18px;
color: #808080;
text-shadow: 0 1px 0 #ffffff;
}
.topbar .dropdown-menu a:hover, .dropdown-menu a:hover {
background-color: #dddddd;
background-repeat: repeat-x;
background-image: -khtml-gradient(linear, left top, left bottom, from(#eeeeee), to(#dddddd));
background-image: -moz-linear-gradient(top, #eeeeee, #dddddd);
background-image: -ms-linear-gradient(top, #eeeeee, #dddddd);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #eeeeee), color-stop(100%, #dddddd));
background-image: -webkit-linear-gradient(top, #eeeeee, #dddddd);
background-image: -o-linear-gradient(top, #eeeeee, #dddddd);
background-image: linear-gradient(top, #eeeeee, #dddddd);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#dddddd', GradientType = 0);
color: #404040;
text-decoration: none;
-webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025);
-moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025);
box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025);
}
.open .menu, .dropdown.open .menu, .open .dropdown-toggle, .dropdown.open .dropdown-toggle {
color: #ffffff;
background: #ccc;
background: rgba(0, 0, 0, 0.3);
}
.open .menu-dropdown, .dropdown.open .menu-dropdown, .open .dropdown-menu, .dropdown.open .dropdown-menu {
display: block;
}
.tabs, .pills {
margin: 0 0 20px;
padding: 0;
list-style: none;
zoom: 1;
}
.tabs:before, .pills:before, .tabs:after, .pills:after {
display: table;
content: "";
zoom: 1;
*display: inline;
}
.tabs:after, .pills:after {
clear: both;
}
.tabs>li, .pills>li {
float: left;
}
.tabs>li>a, .pills>li>a {
display: block;
}
.tabs {
float: left;
width: 100%;
border-bottom: 1px solid #ddd;
}
.tabs>li {
position: relative;
top: 1px;
}
.tabs>li>a {
padding: 0 15px;
margin-right: 2px;
line-height: 36px;
border: 1px solid transparent;
-webkit-border-radius: 4px 4px 0 0;
-moz-border-radius: 4px 4px 0 0;
border-radius: 4px 4px 0 0;
}
.tabs>li>a:hover {
text-decoration: none;
background-color: #eee;
border-color: #eee #eee #ddd;
}
.tabs>li.active>a {
color: #808080;
background-color: #ffffff;
border: 1px solid #ddd;
border-bottom-color: transparent;
}
.tabs .menu-dropdown, .tabs .dropdown-menu {
top: 35px;
border-width: 1px;
-webkit-border-radius: 0 6px 6px 6px;
-moz-border-radius: 0 6px 6px 6px;
border-radius: 0 6px 6px 6px;
}
.tabs a.menu:after, .tabs .dropdown-toggle:after {
border-top-color: #999;
margin-top: 15px;
margin-left: 5px;
}
.tabs li.open.menu .menu, .tabs .open.dropdown .dropdown-toggle {
border-color: #999;
}
.tabs li.open a.menu:after, .tabs .dropdown.open .dropdown-toggle:after {
border-top-color: #555;
}
.tab-content {
clear: both;
}
.pills a {
margin: 5px 3px 5px 0;
padding: 0 15px;
text-shadow: 0 1px 1px #ffffff;
line-height: 30px;
-webkit-border-radius: 15px;
-moz-border-radius: 15px;
border-radius: 15px;
}
.pills a:hover {
background: #00438a;
color: #ffffff;
text-decoration: none;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.25);
}
.pills .active a {
background: #0069d6;
color: #ffffff;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.25);
}
.tab-content>*, .pill-content>* {
display: none;
}
.tab-content>.active, .pill-content>.active {
display: block;
}
.breadcrumb {
margin: 0 0 18px;
padding: 7px 14px;
background-color: #f5f5f5;
background-repeat: repeat-x;
background-image: -khtml-gradient(linear, left top, left bottom, from(#ffffff), to(#f5f5f5));
background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5);
background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f5f5f5));
background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5);
background-image: -o-linear-gradient(top, #ffffff, #f5f5f5);
background-image: linear-gradient(top, #ffffff, #f5f5f5);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#f5f5f5', GradientType = 0);
border: 1px solid #ddd;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
-webkit-box-shadow: inset 0 1px 0 #ffffff;
-moz-box-shadow: inset 0 1px 0 #ffffff;
box-shadow: inset 0 1px 0 #ffffff;
}
.breadcrumb li {
display: inline;
text-shadow: 0 1px 0 #ffffff;
}
.breadcrumb .divider {
padding: 0 5px;
color: #bfbfbf;
}
.breadcrumb .active a {
color: #404040;
}
.hero-unit {
background-color: #f5f5f5;
margin-bottom: 30px;
padding: 60px;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
}
.hero-unit h1 {
margin-bottom: 0;
font-size: 60px;
line-height: 1;
letter-spacing: -1px;
}
.hero-unit p {
font-size: 18px;
font-weight: 200;
line-height: 27px;
}
footer {
margin-top: 17px;
padding-top: 17px;
border-top: 1px solid #eee;
}
.page-header {
margin-bottom: 17px;
border-bottom: 1px solid #ddd;
-webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
-moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
}
.page-header h1 {
margin-bottom: 8px;
}
.btn.danger, .alert-message.danger, .btn.danger:hover, .alert-message.danger:hover, .btn.error, .alert-message.error, .btn.error:hover, .alert-message.error:hover, .btn.success, .alert-message.success, .btn.success:hover, .alert-message.success:hover, .btn.info, .alert-message.info, .btn.info:hover, .alert-message.info:hover {
color: #ffffff;
}
.btn.danger, .alert-message.danger, .btn.error, .alert-message.error {
background-color: #c43c35;
background-repeat: repeat-x;
background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));
background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));
background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
background-image: linear-gradient(top, #ee5f5b, #c43c35);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ee5f5b', endColorstr = '#c43c35', GradientType = 0);
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
border-color: #c43c35 #c43c35 #882a25;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
}
.btn.success, .alert-message.success {
background-color: #57a957;
background-repeat: repeat-x;
background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957));
background-image: -moz-linear-gradient(top, #62c462, #57a957);
background-image: -ms-linear-gradient(top, #62c462, #57a957);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957));
background-image: -webkit-linear-gradient(top, #62c462, #57a957);
background-image: -o-linear-gradient(top, #62c462, #57a957);
background-image: linear-gradient(top, #62c462, #57a957);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#62c462', endColorstr = '#57a957', GradientType = 0);
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
border-color: #57a957 #57a957 #3d773d;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
}
.btn.info, .alert-message.info {
background-color: #339bb9;
background-repeat: repeat-x;
background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9));
background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9));
background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
background-image: linear-gradient(top, #5bc0de, #339bb9);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#5bc0de', endColorstr = '#339bb9', GradientType = 0);
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
border-color: #339bb9 #339bb9 #22697d;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
}
.btn {
cursor: pointer;
display: inline-block;
background-color: #e6e6e6;
background-repeat: no-repeat;
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));
background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);
background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#e6e6e6', GradientType = 0);
padding: 5px 14px 6px;
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
color: #333;
font-size: 13px;
line-height: normal;
border: 1px solid #ccc;
border-bottom-color: #bbb;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
-webkit-transition: 0.1s linear all;
-moz-transition: 0.1s linear all;
-ms-transition: 0.1s linear all;
-o-transition: 0.1s linear all;
transition: 0.1s linear all;
}
.btn:hover {
background-position: 0 -15px;
color: #333;
text-decoration: none;
}
.btn:focus {
outline: 1px dotted #666;
}
.btn.primary {
color: #ffffff;
background-color: #0064cd;
background-repeat: repeat-x;
background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));
background-image: -moz-linear-gradient(top, #049cdb, #0064cd);
background-image: -ms-linear-gradient(top, #049cdb, #0064cd);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));
background-image: -webkit-linear-gradient(top, #049cdb, #0064cd);
background-image: -o-linear-gradient(top, #049cdb, #0064cd);
background-image: linear-gradient(top, #049cdb, #0064cd);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#049cdb', endColorstr = '#0064cd', GradientType = 0);
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
border-color: #0064cd #0064cd #003f81;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
}
.btn:active {
-webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
-moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
}
.btn.disabled {
cursor: default;
background-image: none;
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
filter: alpha(opacity = 65);
-khtml-opacity: 0.65;
-moz-opacity: 0.65;
opacity: 0.65;
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}
.btn[disabled] {
cursor: default;
background-image: none;
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
filter: alpha(opacity = 65);
-khtml-opacity: 0.65;
-moz-opacity: 0.65;
opacity: 0.65;
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}
.btn.large {
font-size: 15px;
line-height: normal;
padding: 9px 14px 9px;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
}
.btn.small {
padding: 7px 9px 7px;
font-size: 11px;
}
:root .alert-message, :root .btn {
border-radius: 0 \0;
}
button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner {
padding: 0;
border: 0;
}
.close {
float: right;
color: #000000;
font-size: 20px;
font-weight: bold;
line-height: 13.5px;
text-shadow: 0 1px 0 #ffffff;
filter: alpha(opacity = 20);
-khtml-opacity: 0.2;
-moz-opacity: 0.2;
opacity: 0.2;
}
.close:hover {
color: #000000;
text-decoration: none;
filter: alpha(opacity = 40);
-khtml-opacity: 0.4;
-moz-opacity: 0.4;
opacity: 0.4;
}
.alert-message {
position: relative;
padding: 7px 15px;
margin-bottom: 18px;
color: #404040;
background-color: #eedc94;
background-repeat: repeat-x;
background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94));
background-image: -moz-linear-gradient(top, #fceec1, #eedc94);
background-image: -ms-linear-gradient(top, #fceec1, #eedc94);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94));
background-image: -webkit-linear-gradient(top, #fceec1, #eedc94);
background-image: -o-linear-gradient(top, #fceec1, #eedc94);
background-image: linear-gradient(top, #fceec1, #eedc94);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#fceec1', endColorstr = '#eedc94', GradientType = 0);
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
border-color: #eedc94 #eedc94 #e4c652;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
border-width: 1px;
border-style: solid;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25);
}
.alert-message .close {
*margin-top: 3px;
}
.alert-message h5 {
line-height: 18px;
}
.alert-message p {
margin-bottom: 0;
}
.alert-message div {
margin-top: 5px;
margin-bottom: 2px;
line-height: 28px;
}
.alert-message .btn {
-webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
-moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
}
.alert-message.block-message {
background-image: none;
background-color: #fdf5d9;
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
padding: 14px;
border-color: #fceec1;
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}
.alert-message.block-message ul, .alert-message.block-message p {
margin-right: 30px;
}
.alert-message.block-message ul {
margin-bottom: 0;
}
.alert-message.block-message li {
color: #404040;
}
.alert-message.block-message .alert-actions {
margin-top: 5px;
}
.alert-message.block-message.error, .alert-message.block-message.success, .alert-message.block-message.info {
color: #404040;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
}
.alert-message.block-message.error {
background-color: #fddfde;
border-color: #fbc7c6;
}
.alert-message.block-message.success {
background-color: #d1eed1;
border-color: #bfe7bf;
}
.alert-message.block-message.info {
background-color: #ddf4fb;
border-color: #c6edf9;
}
.pagination {
height: 36px;
margin: 18px 0;
}
.pagination ul {
float: left;
margin: 0;
border: 1px solid #ddd;
border: 1px solid rgba(0, 0, 0, 0.15);
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
-moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
}
.pagination li {
display: inline;
}
.pagination a {
float: left;
padding: 0 14px;
line-height: 34px;
border-right: 1px solid;
border-right-color: #ddd;
border-right-color: rgba(0, 0, 0, 0.15);
*border-right-color: #ddd;
text-decoration: none;
}
.pagination a:hover, .pagination .active a {
background-color: #c7eefe;
}
.pagination .disabled a, .pagination .disabled a:hover {
background-color: transparent;
color: #bfbfbf;
}
.pagination .next a {
border: 0;
}
.well {
background-color: #f5f5f5;
margin-bottom: 20px;
padding: 19px;
min-height: 20px;
border: 1px solid #eee;
border: 1px solid rgba(0, 0, 0, 0.05);
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
}
.well blockquote {
border-color: #ddd;
border-color: rgba(0, 0, 0, 0.15);
}
.modal-backdrop {
background-color: #000000;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 10000;
}
.modal-backdrop.fade {
opacity: 0;
}
.modal-backdrop, .modal-backdrop.fade.in {
filter: alpha(opacity = 80);
-khtml-opacity: 0.8;
-moz-opacity: 0.8;
opacity: 0.8;
}
.modal {
position: fixed;
top: 50%;
left: 50%;
z-index: 11000;
width: 560px;
margin: -250px 0 0 -250px;
background-color: #ffffff;
border: 1px solid #999;
border: 1px solid rgba(0, 0, 0, 0.3);
*border: 1px solid #999;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
-webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-webkit-background-clip: padding-box;
-moz-background-clip: padding-box;
background-clip: padding-box;
}
.modal .close {
margin-top: 7px;
}
.modal.fade {
-webkit-transition: opacity .3s linear, top .3s ease-out;
-moz-transition: opacity .3s linear, top .3s ease-out;
-ms-transition: opacity .3s linear, top .3s ease-out;
-o-transition: opacity .3s linear, top .3s ease-out;
transition: opacity .3s linear, top .3s ease-out;
top: -25%;
}
.modal.fade.in {
top: 50%;
}
.modal-header {
border-bottom: 1px solid #eee;
padding: 5px 15px;
}
.modal-body {
padding: 15px;
}
.modal-footer {
background-color: #f5f5f5;
padding: 14px 15px 15px;
border-top: 1px solid #ddd;
-webkit-border-radius: 0 0 6px 6px;
-moz-border-radius: 0 0 6px 6px;
border-radius: 0 0 6px 6px;
-webkit-box-shadow: inset 0 1px 0 #ffffff;
-moz-box-shadow: inset 0 1px 0 #ffffff;
box-shadow: inset 0 1px 0 #ffffff;
zoom: 1;
margin-bottom: 0;
}
.modal-footer:before, .modal-footer:after {
display: table;
content: "";
zoom: 1;
*display: inline;
}
.modal-footer:after {
clear: both;
}
.modal-footer .btn {
float: right;
margin-left: 5px;
}
.twipsy {
display: block;
position: absolute;
visibility: visible;
padding: 5px;
font-size: 11px;
z-index: 1000;
filter: alpha(opacity = 80);
-khtml-opacity: 0.8;
-moz-opacity: 0.8;
opacity: 0.8;
}
.twipsy.fade.in {
filter: alpha(opacity = 80);
-khtml-opacity: 0.8;
-moz-opacity: 0.8;
opacity: 0.8;
}
.twipsy.above .twipsy-arrow {
bottom: 0;
left: 50%;
margin-left: -5px;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
border-top: 5px solid #000000;
}
.twipsy.left .twipsy-arrow {
top: 50%;
right: 0;
margin-top: -5px;
border-top: 5px solid transparent;
border-bottom: 5px solid transparent;
border-left: 5px solid #000000;
}
.twipsy.below .twipsy-arrow {
top: 0;
left: 50%;
margin-left: -5px;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
border-bottom: 5px solid #000000;
}
.twipsy.right .twipsy-arrow {
top: 50%;
left: 0;
margin-top: -5px;
border-top: 5px solid transparent;
border-bottom: 5px solid transparent;
border-right: 5px solid #000000;
}
.twipsy-inner {
padding: 3px 8px;
background-color: #000000;
color: white;
text-align: center;
max-width: 200px;
text-decoration: none;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
.twipsy-arrow {
position: absolute;
width: 0;
height: 0;
}
.popover {
position: absolute;
top: 0;
left: 0;
z-index: 1000;
padding: 5px;
display: none;
}
.popover.above .arrow {
bottom: 0;
left: 50%;
margin-left: -5px;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
border-top: 5px solid #000000;
}
.popover.right .arrow {
top: 50%;
left: 0;
margin-top: -5px;
border-top: 5px solid transparent;
border-bottom: 5px solid transparent;
border-right: 5px solid #000000;
}
.popover.below .arrow {
top: 0;
left: 50%;
margin-left: -5px;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
border-bottom: 5px solid #000000;
}
.popover.left .arrow {
top: 50%;
right: 0;
margin-top: -5px;
border-top: 5px solid transparent;
border-bottom: 5px solid transparent;
border-left: 5px solid #000000;
}
.popover .arrow {
position: absolute;
width: 0;
height: 0;
}
.popover .inner {
background-color: #000000;
background-color: rgba(0, 0, 0, 0.8);
padding: 3px;
overflow: hidden;
width: 280px;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
-webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
-moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
}
.popover .title {
background-color: #f5f5f5;
padding: 9px 15px;
line-height: 1;
-webkit-border-radius: 3px 3px 0 0;
-moz-border-radius: 3px 3px 0 0;
border-radius: 3px 3px 0 0;
border-bottom: 1px solid #eee;
}
.popover .content {
background-color: #ffffff;
padding: 14px;
-webkit-border-radius: 0 0 3px 3px;
-moz-border-radius: 0 0 3px 3px;
border-radius: 0 0 3px 3px;
-webkit-background-clip: padding-box;
-moz-background-clip: padding-box;
background-clip: padding-box;
}
.popover .content p, .popover .content ul, .popover .content ol {
margin-bottom: 0;
}
.fade {
-webkit-transition: opacity 0.15s linear;
-moz-transition: opacity 0.15s linear;
-ms-transition: opacity 0.15s linear;
-o-transition: opacity 0.15s linear;
transition: opacity 0.15s linear;
opacity: 0;
}
.fade.in {
opacity: 1;
}
.label {
padding: 1px 3px 2px;
background-color: #bfbfbf;
font-size: 9.75px;
font-weight: bold;
color: #ffffff;
text-transform: uppercase;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
.label.important {
background-color: #c43c35;
}
.label.warning {
background-color: #f89406;
}
.label.success {
background-color: #46a546;
}
.label.notice {
background-color: #62cffc;
}
.media-grid {
margin-left: -20px;
margin-bottom: 0;
zoom: 1;
}
.media-grid:before, .media-grid:after {
display: table;
content: "";
zoom: 1;
*display: inline;
}
.media-grid:after {
clear: both;
}
.media-grid li {
display: inline;
}
.media-grid a {
float: left;
padding: 4px;
margin: 0 0 20px 20px;
border: 1px solid #ddd;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
-moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
}
.media-grid a img {
display: block;
}
.media-grid a:hover {
border-color: #0069d6;
-webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
-moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
}
</style>
<style type="text/css">
html, body {
padding-top: 10px;
}
.bottom {
border-top: 1px solid #8e397d;
}
.bottom table {
border-top: 0px;
border-left: 0px;
border-right: 0px;
}
.bottom table thead, .bottom table tbody {
border: 0px;
}
.bottom table th, .bottom table td {
padding: 0 0 0 20px;
line-height: 20px;
border-left: 0px;
}
table.code td {
border-top: 0px;
padding: 0px;
margin: 0px;
}
.container >.row.b {
border-top: 1px solid #ccc;
margin-top: 1em;
}
code {
white-space: pre;
width: 100%;
}
code[type] {
display: block;
}
code[type="text/description"] {
font-family: inherit;
font-size: 100%;
font-weight: normal;
font-style: normal;
}
code.good:before, code.bad:before {
width: 4em;
margin: 0px 5px 0px 0px;
padding: 2px;
font-size: 9.75px;
font-weight: bold;
color: white;
float:right;
text-align: center;
text-transform: uppercase;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
code.good:before {
content:'GOOD';
background-color:#46A546;
}
code.good {
color:#006600;
}
code.bad {
color:#990000;
}
code.bad:before {
content:'BAD';
background-color:#C43C35;
}
</style>
</head>
<body>
<div class="container">
<header class="row">
<h1 class="span12">Scalacheat</h1>
</header>
<div class="row">
<div class="span12">
<h6 id="contributed_by_brendan_oconnor">Contributed by Brendan O’Connor</h6>
</div>
</div>
<div class="row">
<div class="offset1 span11">
<h2 id="variables">variables</h2>
</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">var x = 5</code>
</div>
<div class="span4">variable</div>
</div>
<div class="row b">
<div class="span8">
<code class="good" type="text/scala">val x = 5</code>
<code class="bad" type="text/scala">x=6</code>
</div>
<div class="span4">constant</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">var x: Double = 5</code>
</div>
<div class="span4">explicit type</div>
</div>
<div class="row">
<div class="offset1 span11">
<h2 id="functions">functions</h2>
</div>
</div>
<div class="row b">
<div class="span8">
<code class="good" type="text/scala">def f(x: Int) = { x*x }</code>
<code class="bad" type="text/scala">def f(x: Int) { x*x }</code>
</div>
<div class="span4">define function <br> hidden error: without = it’s a
Unit-returning procedure; causes havoc
</div>
</div>
<div class="row b">
<div class="span8">
<code class="good" type="text/scala">def f(x: Any) = println(x)</code>
<code class="bad" type="text/scala">def f(x) = println(x)</code>
</div>
<div class="span4">define function <br> syntax error: need types for every arg.
</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">type R = Double</code>
</div>
<div class="span4">type alias</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">def f(x: R)</code>
<em>vs.</em>
<code type="text/scala">def f(x: =&gt; R)</code>
</div>
<div class="span4">call-by-value <br> call-by-name (lazy parameters)</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">(x:R) =&gt; x*x</code>
</div>
<div class="span4">anonymous function</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">(1 to 5).map(_*2)</code>
<em>vs.</em>
<code type="text/scala">(1 to 5).reduceLeft( _+_ )</code>
</div>
<div class="span4">anonymous function: underscore is positionally matched arg.
</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">(1 to 5).map( x =&gt; x*x )</code>
</div>
<div class="span4">anonymous function: to use an arg twice, have to name it.</div>
</div>
<div class="row b">
<div class="span8">
<code class="good" type="text/scala">(1 to 5).map(2*)</code>
<code class="bad" type="text/scala">(1 to 5).map(*2)</code>
</div>
<div class="span4">anonymous function: bound infix method. Use <code type="text/scala">2*_</code>
for sanity’s sake instead.
</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">(1 to 5).map { val x=_*2; println(x); x }</code>
</div>
<div class="span4">anonymous function: block style returns last expression.</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">(1 to 5) filter {_%2 == 0} map {_*2}</code>
</div>
<div class="span4">anonymous functions: pipeline style. (or parens too).</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">def compose(g:R=&gt;R, h:R=&gt;R) = (x:R) =&gt; g(h(x))</code>
<code type="text/scala">val f = compose({_*2}, {_-1})</code>
</div>
<div class="span4">anonymous functions: to pass in multiple blocks, need outer
parens.
</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">val zscore = (mean:R, sd:R) =&gt; (x:R) =&gt; (x-mean)/sd</code>
</div>
<div class="span4">currying, obvious syntax.</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">def zscore(mean:R, sd:R) = (x:R) =&gt; (x-mean)/sd</code>
</div>
<div class="span4">currying, obvious syntax</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">def zscore(mean:R, sd:R)(x:R) = (x-mean)/sd</code>
</div>
<div class="span4">currying, sugar syntax. but then:</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">val normer = zscore(7, 0.4)_</code>
</div>
<div class="span4">need trailing underscore to get the partial, only for the
sugar version.
</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">def mapmake[T](g:T=&gt;T)(seq: List[T]) = seq.map(g)</code>
</div>
<div class="span4">generic type.</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">5.+(3); 5 + 3
(1 to 5) map (_*2)</code>
</div>
<div class="span4">infix sugar.</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">def sum(args: Int*) = args.reduceLeft(_+_)</code>
</div>
<div class="span4">varargs.</div>
</div>
<div class="row">
<div class="offset1 span11">
<h2 id="packages">packages</h2>
</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">import scala.collection._</code>
</div>
<div class="span4">wildcard import.</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">import scala.collection.Vector</code>
<code type="text/scala">import
scala.collection.{Vector, Sequence}</code>
</div>
<div class="span4">selective import.</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">import scala.collection.{Vector =&gt; Vec28}</code>
</div>
<div class="span4">renaming import.</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">import java.util.{Date =&gt; _, _}</code>
</div>
<div class="span4">import all from java.util except Date.</div>
</div>
<div class="row b">
<div class="span8">
<em>at start of file</em>
<code type="text/scala">package pkg</code>
<code type="text/scala">package pkg { ... }</code>
</div>
<div class="span4">declare a package.</div>
</div>
<div class="row">
<div class="offset1 span11">
<h2 id="data_structures">data structures</h2>
</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">(1,2,3)</code>
</div>
<div class="span4">tuple literal. (<code>Tuple3</code>)
</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">var (x,y,z) = (1,2,3)</code>
</div>
<div class="span4">destructuring bind: tuple unpacking via pattern matching.</div>
</div>
<div class="row b">
<div class="span8">
<code class="bad" type="text/scala">var x,y,z = (1,2,3)</code>
</div>
<div class="span4">hidden error: each assigned to the entire tuple.</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">var xs = List(1,2,3)</code>
</div>
<div class="span4">list (immutable).</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">xs(2)</code>
</div>
<div class="span4">paren indexing. (<a
href="http://www.slideshare.net/Odersky/fosdem-2009-1013261/27">slides</a>)
</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">1 :: List(2,3)</code>
</div>
<div class="span4">cons.</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">1 to 5</code>
<em>same as</em>
<code type="text/scala">1 until 6</code>
<code type="text/scala">1 to 10 by 2</code>
</div>
<div class="span4">range sugar.</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">()</code>
<em>(empty parens)</em>
</div>
<div class="span4">sole member of the Unit type (like C/Java void).</div>
</div>
<div class="row">
<div class="offset1 span11">
<h2 id="control_constructs">control constructs</h2>
</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">if (check) happy else sad</code>
</div>
<div class="span4">conditional.</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">if (check) happy</code>
<em>same as</em>
<code type="text/scala">if (check) happy else ()</code>
</div>
<div class="span4">conditional sugar.</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">while (x &lt; 5) { println(x); x += 1}</code>
</div>
<div class="span4">while loop.</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">do { println(x); x += 1} while (x &lt; 5)</code>
</div>
<div class="span4">do while loop.</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">import scala.util.control.Breaks._
breakable {
for (x &lt;- xs) {
if (Math.random &lt; 0.1) break
}
}</code>
</div>
<div class="span4">break. (<a
href="http://www.slideshare.net/Odersky/fosdem-2009-1013261/21">slides</a>)
</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">for (x &lt;- xs if x%2 == 0) yield x*10</code>
<em>same as</em>
<code type="text/scala">xs.filter(_%2 == 0).map(_*10)</code>
</div>
<div class="span4">for comprehension: filter/map</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">for ((x,y) &lt;- xs zip ys) yield x*y</code>
<em>same as</em>
<code type="text/scala">(xs zip ys) map { case (x,y) =&gt; x*y }</code>
</div>
<div class="span4">for comprehension: destructuring bind</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">for (x &lt;- xs; y &lt;- ys) yield x*y</code>
<em>same as</em>
<code type="text/scala">xs flatMap {x =&gt; ys map {y =&gt; x*y}}</code>
</div>
<div class="span4">for comprehension: cross product</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">for (x &lt;- xs; y &lt;- ys) {
println("%d/%d = %.1f".format(x,y, x*y))
}</code>
</div>
<div class="span4">for comprehension: imperative-ish<br>
<a
href="http://java.sun.com/javase/6/docs/api/java/util/Formatter.html#syntax">sprintf-style</a>
</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">for (i &lt;- 1 to 5) { println(i) }</code>
</div>
<div class="span4">for comprehension: iterate including the upper bound</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">for (i &lt;- 1 until 5) { println(i) }</code>
</div>
<div class="span4">for comprehension: iterate omitting the upper bound</div>
</div>
<div class="row">
<div class="offset1 span11">
<h2 id="pattern_matching">pattern matching</h2>
</div>
</div>
<div class="row b">
<div class="span8">
<code class="good" type="text/scala">(xs zip ys) map { case (x,y) =&gt; x*y }</code>
<code class="bad" type="text/scala">(xs zip ys) map( (x,y) =&gt; x*y )</code>
</div>
<div class="span4">use case in function args for pattern matching.</div>
</div>
<div class="row b">
<div class="span8">
<code class="bad" type="text/scala">val v42 = 42
Some(3) match {
case Some(v42) =&gt; println("42")
case _ =&gt; println("Not 42")
}</code>
</div>
<div class="span4">“v42” is interpreted as a name matching any Int value, and
“42” is printed.
</div>
</div>
<div class="row b">
<div class="span8">
<code class="good" type="text/scala">val v42 = 42
Some(3) match {
case Some(`v42`) =&gt; println("42")
case _ =&gt; println("Not 42")
}</code>
</div>
<div class="span4">“`v42`” with backticks is interpreted as the existing val
<code>v42</code>, and “Not 42” is printed.
</div>
</div>
<div class="row b">
<div class="span8">
<code class="good" type="text/scala">val UppercaseVal = 42
Some(3) match {
case Some(UppercaseVal) =&gt; println("42")
case _ =&gt; println("Not 42")
}</code>
</div>
<div class="span4">
<code>UppercaseVal</code> is treated as an existing val,
rather than a new pattern variable, because it starts with an uppercase letter. Thus,
the value contained within <code>UppercaseVal</code> is checked against <code>3</code>,
and “Not 42” is printed.
</div>
</div>
<div class="row">
<div class="offset1 span11">
<h2 id="object_orientation">object orientation</h2>
</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">class C(x: R)</code>
<em>same as</em>
<code type="text/scala">class C(private val x: R)</code>
<code type="text/scala">var c = new C(4)</code>
</div>
<div class="span4">constructor params - private</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">class C(val x: R)
var c = new C(4)
c.x</code>
</div>
<div class="span4">constructor params - public</div>
</div>
<div class="row">
<div class="span12">
<div class="row b">
<div class="span8"><code type="text/scala">class C(var x: R) {</code></div><div class="span4">constructor is class body</div>
</div>
<div class="row b">
<div class="span8"><code type="text/scala"> assert(x &gt; 0, "positive please")</code></div><div class="span4"></div>
</div>
<div class="row b">
<div class="span8"><code type="text/scala"> var y = x</code></div><div class="span4">declare a public member</div>
</div>
<div class="row b">
<div class="span8"><code type="text/scala"> val readonly = 5</code></div><div class="span4">declare a gettable but not settable member</div>
</div>
<div class="row b">
<div class="span8"><code type="text/scala"> private var secret = 1</code></div><div class="span4">declare a private member</div>
</div>
<div class="row b">
<div class="span8"><code type="text/scala"> def this = this(42)</code></div><div class="span4">alternative constructor</div>
</div>
<div class="row b">
<div class="span8"><code type="text/scala">}</code></div><div class="span4"></div>
</div>
</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">new{ ... }</code>
</div>
<div class="span4">anonymous class</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">abstract class D { ... }</code>
</div>
<div class="span4">define an abstract class. (non-createable)</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">class C extends D { ... }</code>
</div>
<div class="span4">define an inherited class.</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">class D(var x: R)</code>
<code type="text/scala">class C(x: R) extends D(x)</code>
</div>
<div class="span4">inheritance and constructor params. (wishlist: automatically pass-up params by default)
</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">object O extends D { ... }</code>
</div>
<div class="span4">define a singleton. (module-like)</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">trait T { ... }</code>
<code type="text/scala">class C extends T { ... }</code>
<code type="text/scala">class C extends D with T { ... }</code>
</div>
<div class="span4">traits.<br>interfaces-with-implementation. no constructor
params. <a
href="http://docs.scala-lang.org/tutorials/tour/mixin-class-composition.html">mixin-able</a>.
</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">trait T1; trait T2</code>
<code type="text/scala">class C extends T1 with T2</code>
<code type="text/scala">class C extends D with T1 with T2</code>
</div>
<div class="span4">multiple traits.</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">class C extends D { override def f = ...}</code>
</div>
<div class="span4">must declare method overrides.</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">new java.io.File("f")</code>
</div>
<div class="span4">create object.</div>
</div>
<div class="row b">
<div class="span8">
<code class="bad" type="text/scala">new List[Int]</code>
<code class="good" type="text/scala">List(1,2,3)</code>
</div>
<div class="span4">type error: abstract type<br>instead, convention: callable
factory shadowing the type
</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">classOf[String]</code>
</div>
<div class="span4">class literal.</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">x.isInstanceOf[String]</code>
</div>
<div class="span4">type check (runtime)</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">x.asInstanceOf[String]</code>
</div>
<div class="span4">type cast (runtime)</div>
</div>
<div class="row b">
<div class="span8">
<code type="text/scala">x: String</code>
</div>
<div class="span4">ascription (compile time)</div>
</div>
</div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment