D2.0的字符串增加了常量,不变量和变量.在很大程度上增加了语意的清晰度.但给编程带来了更小的粒度.如同使用动态脚本语言,你不必关系类型,使用静态语言你就要严格定义.D2就更严格了:对字符串也进行严格的定义.
1.变量 D1.0的字符串都是变量.也就是mutable的.D2中仅仅char[] 是变量,可以运用下标进行访问每个char的变量.
2.不变量是invariant的.也就是不变的.一旦初始化就不可以更改.修改长度,连接,切片还是可以的.
3.常量是const定义的.const可以在编译时求值的.
从D2的文档来看,D引入不变量和常量主要为了多核并行编程.
4.例子1:
alias char[] mstring; // 可变的
alias const(char)[] cstring; //常量
alias invariant(char)[] istring; // 不变量
class String{
/// 字符串数据
private mstring value_;
///参数多数都用不变量或者常量
public this (cstring value = "")
{
this.value_ = value.dup;
}
///可以使用cast转换,在D1和D2兼容
public istring value (cstring v)
{
return cast(istring) (this.value_ = v.dup);
}
public istring value ()
{
return cast(istring) this.value_;
}
///仅使用D2可以使用idup获得一个不变量的副本
public istring ivalue (cstring v)
{
return (this.value_ = v.dup).idup;
}
public istring ivalue ()
{
return this.value_.idup;
}
}
5.调用C的API,要使用std.string.toStringz转换const char*,char*时,可以用cstring.ptr指针,进行转换cast(char*) cstring.ptr;
6.invariant,immutable都是D2的关键字.通过试验,二者似乎没有区别.
7.下面代码在D2.027,XP测试通过.
import std.stdio;
void main()
{
string istr;
istr = "abcde";
immutable(char)[] p = cast(invariant)istr.dup;
char[] mstr = istr.dup;
writefln(mstr);
istr = istr ~ istr;
writefln(istr);
string istr2 = istr.idup;
istr2 = istr2 ~ istr2;
writefln(istr2);
istr2.length = 3;
istr2 = istr2 ~ "ff";
writefln(istr2);
string istr3 = istr2[2..4];
istr3 ~= "gg";
writefln(istr3);
//istr3[3]='a'; error
istr3= istr3[0..2]~'a'~istr3[3..$];
writefln(istr3);
}
不当之处,希望大家指正!
分享到:
相关推荐
3.增加了修复 IL 文件截断字符串功能,截断的字符串肯能会导致 PASSOLO 不能解析 4.增加了编译时插入强命名的功能 2007-03-24 更新 1.修复部分机器不能运行的问题。 2.修复程序在系统根目录路径的问题。 附加信息 ...
8.5.5. 反向操作,ext把json变成字符串 8.6. 小声说说scope 8.7. 菜单和工具条 8.7.1. 至简至廉的菜单 8.7.2. 丰富一点儿的多级菜单 8.7.3. 单选多选,菜单里搞这套 8.7.4. 小把戏,定制好的菜单 8.7.5. SplitButton...
Go如何声明一个多行字符串的变量?使用 ` 来包含即可。 package main import ( fmt ) func main() { str := `hello world v2.0` fmt.Println(str) } Demo:http://play.golang.org/p/BOL8_SwQ0D 以上所述就是...
在編輯框輸入要轉換的字符串,然後按鍵進行轉換. 此轉換器還有一個特殊效果---通殺;在通殺狀態下,你可以選定系統任何窗口的字符串,然後按鍵進行轉換。 默認轉換鍵: Ctrl+A:大寫轉小寫Ctrl+S:小寫轉大寫...
第15章 数字、字符串和集合 15.1 数字对象 15.2 字符串对象 15.2.1 NSLog函数 15.2.2 可变对象与不可变对象 15.2.3 可变字符串 15.2.4 所有对象到哪里去了 15.3 数组对象 15.4 同步AddressCard方法 15.4.1 快速枚举 ...
第一章 字符串 o 1.0 本章导读 o 1.1 旋转字符串 o 1.2 字符串包含 o 1.3 字符串转换成整数 o 1.4 回文判断 o 1.5 最长回文子串 o 1.6 字符串的全排列 o 1.10 本章习题 第二章 数组 o 2.0 本章导读 o 2.1 寻找最小的...
字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, File...
字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, File...
字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, File...
解析返回规范化Address对象的字符串。 如果字符串不是美国地址,则返回nil。 这是最初由Schuyler D. Erle编写的perl模块的端口。 Ruby版本 StreetAddress :: US 2+版旨在与ruby 2+一起使用。 它可能适用于ruby ...
js 加载并解析XML字符串的实现代码,需要的朋友可以参考下。
字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, File...
字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, File...
字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, File...
字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, File...
字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, File...
字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, File...
/*两个人的得分转换成字符串输出*/ void playtoplay(void);/*人人对战函数*/ void DrawQp(void);/*画棋盘函数*/ void SetPlayColor(int x);/*设置棋子第一次的颜色*/ void MoveColor(int x,int y);/*恢复原来...
代码如下: protected void ...d;z;y;u”; string[] sa = s.Split(‘;’); Array.Sort(sa); //排序 for (int i = 0; i ”); } } 执行结果: 您可能感兴趣的文章:ASP.Net2.0 GridView 多列排序,显示排序图标,分页让A
字符串操作相关函数 {Copy, Trim, UpperCase, SetLength, Format, SameText, CompareStr等等} d. 日期时间相关函数 {Date, Time, Now, FormatDateTime等等} e. 文件操作相关函数 {FileOpen, FileCreate, File...