package helloworld

import org.junit.*;
import java.util.*; class HelloController { def index() {
//def grailsVersion = grailsApplication.metadata['app.grails.version'];
//render "Hello World!"+grailsVersion;
//render grailsVersion;
//def mySet = false;
//def mySet = Boolean.FALSE;
//if(mySet){
//render "true";
//}else{
//render "false";
//}
//String str = null;
//assert str_ = = null;
//render "Hello world it is"+new java.util.Date() + grailsVersion;
//String str = null;
//assert str1 == null; //Groovy基本语法
//int i = 123 + 45 *67;
//render i+"<BR>";
//def x = new java.util.Date();
//render x; //不能直接跟字符串,可能是数据类型问题
//render "<BR>";
//Boolean y = false;
//render y+"<BR>"; //List和Maps
//List myList = [1776, -1, 33, 99, 0, 928734928763]; //Groovy语法简介 //1 没有类型的java
//仅仅要求变量名前使用关键字def(groovy jsr 1开始,在以前的版本中,甚至连def都不需要)
def var = "hello world";
render var+"<BR>";
render var.class; //查看变量的类型
//对象输出后面不能跟+号字符链接符号
//作为例外,方法参数和循环变量的声明不需要def
//2 不需要的public
//3 不需要的语句结束符
//4 字符串链接符
def var2 = "hello world groovy!";
render "<BR>"+var2+"<BR>";
//5 一切皆有对象
def var3 = "hello "+
"world"+
", groovy!";
render var3+"<BR>";
render var3.class;
render "<BR>";
var3 = 1001;
render "<BR>重新赋值后的类型:";
render var3.class;
//6 循环
//def var4 = "hello "+ "world "+", groovy!";
//def repeat(val){
//for(i=0; i<5; i++){
//render val+"<BR>";
//}
//}
//repeat(var4);
//这样直接循环错误哦 //7 String和Gstring
def i=22;
def val4="xlc";
//render "this is ${$val4}:${i}"; 不支持了
render "<BR>this is "+val4+":"+i+"<BR>"; //8 范围
def j=22;
for (jj in 0..<5){
render jj;
}
//render "<BR><BR>";
//不成功
//for(jjj in a..<e){
//render jjj;
//}
//9 默认参数值
/*def repet(val, repeat=3){
for(i in 0..<repeat){
render "this is ....";
}
}*/
//这个例子肯定运行不了
//10 集合
//Groovy支持最常见的两个java集合,java.util.Collection和java.util.Map
//前面所说的范围实际也是集合的一种java.util.List
//(1)Collection
//添加
def collect = ["a","b","c"];
collect.add(1);
collect<<"come on";
collect[collect.size()]=100.0;
//输出
render collect[0]+"<BR>";
render collect[collect.size()-1]+"<BR>";
render collect.size();
for(i=0; i<collect.size(); i++){
render i+":"+collect[i]+"<BR>";
}
//groovy支持负索引
render "-1:"+collect[-1]+"<BR>"; //索引其倒数第1个元素
render "-2:"+collect[-2]+"<BR>"; //索引其倒数第2个元素 //collection支持集合运算
collect = collect + 5;
render collect[collect.size()-1]+"<BR>";
collect = collect-'a';
render collect[0]; //同样的,你可以往集合中添加另一个集合或删除一个集合
collect = collect-collect[0..4]; //把集合的前5个元素去掉
render collect[0]+"<BR>"; //现在集合中仅有一个元素,即原来的最后一个元素
render collect[-1]+"<BR>"; //也可以用负索引,证明最后一个元素就是第一个元素
}
}

  地址: http://blog.csdn.net/kmyhy/article/details/4200563

Grails 第一课的更多相关文章

  1. vue.js学习(第一课)

    学习资料 来自台湾小凡! vue.js是javascript的一个库,只专注于UI层面,核心价值永远是 API的简洁. 第一课: 不支持IE8. 1.声明式渲染: el元素的简称 element : ...

  2. Magento学习第一课——目录结构介绍

    Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...

  3. <-0基础学python.第一课->

    初衷:我电脑里面的歌曲很久没换了,我想听一下新的歌曲,把他们下载下来听,比如某个榜单的,但是一首一首的点击下载另存为真的很恶心 所以我想有没有办法通过程序的方式来实现,结果还真的有,而且网上已经有有人 ...

  4. 留念 C语言第一课简单的计算器制作

    留念 C语言第一课简单的计算器制作 学C语言这么久了.  /* 留念 C语言第一课简单的计算器制作 */   #include<stdio.h>  #include<stdlib.h ...

  5. MFC学习-第一课 MFC运行机制

    最近由于兴趣爱好,学习了孙鑫的MFC教程的第一课.看完视频了,自己便用visual studio 2010尝试了MFC编程,其中遇到了一些问题. 1.vs2010不像vs6.0那样可以新建一个空的MF ...

  6. OpenCV 第一课(安装与配置)

    OpenCV 第一课(安装与配置) win10,opencv-2.4.13, 安装, vs2013, 配置 下载安装软件 官网OpenCV下载地址下载最新版本,我下载的是opencv.2.4.13,然 ...

  7. 【第一课】神奇的Context

    初学Android的困惑 初学Android跳转页面的时候,往往教程里是这么写的: Intent intent = new Intent(); //MyActivity就是当前的Activity,It ...

  8. CodeIgniter框架入门教程——第一课 Hello World!

    本文转载自:http://www.softeng.cn/?p=45 今天开始,我将在这里连载由我自己编写的<CodeIgniter框架入门教程>,首先,这篇教程的读着应该是有PHP基础的编 ...

  9. ruby代码重构第一课

    (文章是从我的个人主页上粘贴过来的, 大家也可以访问我的主页 www.iwangzheng.com) 新手写代码的时候往往会出现很多重复的代码没有提取出来,大师高瞻远瞩总能提点很多有意义的改进,今天重 ...

随机推荐

  1. 2018-2019 2 20165203 《网络对抗技术》 Exp4 恶意代码分析

    2018-2019 2 20165203 <网络对抗技术> Exp4 恶意代码分析 实验要求 监控你自己系统的运行状态,看有没有可疑的程序在运行. 分析一个恶意软件,就分析Exp2或Exp ...

  2. [转] 通过Ajax方式上传文件,使用FormData进行Ajax请求

    通过传统的form表单提交的方式上传文件: <form id= "uploadForm" action= "http://localhost:8080/cfJAX_ ...

  3. A. 【UR #4】元旦三侠的游戏

    题解: 挺水的吧 会发现当b不等于1的时候,状态只有sigma i x^(1/i) 显然这东西很小.. 然后我们会发现每个点向两个点动 定义必胜点和必败点 当一个点有一条边连向必败点 那么它就是必胜点 ...

  4. python单例模式的实现

    1 线程不安全的单例模式 # -*- coding:utf-8 -*- from __future__ import unicode_literals import functools def sin ...

  5. Python yaml处理

    安装方式: pip install pyyaml 一.module.yaml为 name: Tom Smith age: 37 spouse: name: Jane Smith age: 25 chi ...

  6. BZOJ1826 [JSOI2010]缓存交换 堆 贪心

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1826 题意概括 Cache中有m个储存单元,接下来有n个访问地址,每个地址用一个数字表示.访问每一 ...

  7. Unity3d和Android之间互相调用

    摘抄博客 Unity3d Android SDK接入解析(一)Unity3d 与 Android之间的互相调用,一共四章,一定要看完 No1: 总体来说Unity3d与Android之间的互相调用,是 ...

  8. spring整合mybatisXML版

    引用的所有jar包,本demo是一个普通的java项目测试的: aopalliance.jarasm-3.3.1.jaraspectjweaver.jarcglib-2.2.2.jarcommons- ...

  9. 程序猿(媛)的葵花宝典-- 必备idea 插件plugins 提高编码效率

    最近发现了几个非常好用   提高编码效率 的idea 插件 跟大家分享一下,,,不用谢我!!!!!!!!!!!!! 因为idea自带的插件下载可能连接不上服务器而导致插件下载失败,所以这里推荐使用引入 ...

  10. Linux成长之路

    Linux命令格式: 命令   选项 参数command [-options] [parameter1] ···· 常用命令: tree 以目录树的方式显示: tree / 以目录树方式显示根目录结构 ...