XE3随想14:关于 SO 与 SA 函数

通过 SuperObject 的公用函数 SO 实现一个 ISuperObject 接口非常方便;

前面都是给它一个字符串参数, 它的参数可以是任一类型甚至是常数数组.

SA 和 SO 都是返回一 ISuperObject;
SO 可以产生一个 stArray 类型的 ISuperObject, 但 SA 只会产生 stArray 类型的 ISuperObject;
SA 的参数也只能是常数数组.


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses SuperObject, TypInfo;

procedure TForm1.Button1Click(Sender: TObject);
var
  jo: ISuperObject;
begin
  jo := SO([‘A‘,1, ‘B‘,2.5, ‘C‘,‘xyz‘, ‘D‘,True]);
  ShowMessage(jo.AsJSon); // {"D":true,"C":"xyz","B":2.5,"A":1}
  {显示类型名}
  ShowMessage(GetEnumName(TypeInfo(TSuperType), Ord(jo.DataType))); // stObject

  jo := SO(3.14);
  ShowMessage(jo.AsJSon); // 3.14
  {显示类型名}
  ShowMessage(GetEnumName(TypeInfo(TSuperType), Ord(jo.DataType))); // stDouble

  jo := SA([‘A‘,1, ‘B‘,2.5, ‘C‘,‘xyz‘, ‘D‘,True]);
  ShowMessage(jo.AsJSon);
  {显示类型名}
  ShowMessage(GetEnumName(TypeInfo(TSuperType), Ord(jo.DataType))); // stArray
end;

//SA 再举例
procedure TForm1.Button2Click(Sender: TObject);
var
  jo,ja: ISuperObject;
begin
  ja := SA([‘x‘,‘y‘,‘z‘]);
 
  jo := SO(‘{A:1, B:2}‘);
  jo[‘B‘] := ja;

  ShowMessage(jo.AsJSon); // {"B":["x","y","z"],"A":1}
end;

end.
时间: 2024-11-07 13:42:35

XE3随想14:关于 SO 与 SA 函数的相关文章

Scalaz(14)- Monad:函数组合-Kleisli to Reader

Monad Reader就是一种函数的组合.在scalaz里函数(function)本身就是Monad,自然也就是Functor和applicative.我们可以用Monadic方法进行函数组合: 1 import scalaz._ 2 import Scalaz._ 3 object decompose { 4 //两个测试函数 5 val f = (_: Int) + 3 //> f : Int => Int = <function1> 6 val g = (_: Int) *

JSON 之 SuperObject(13): 关于 SO 与 SA 函数

通过 SuperObject 的公用函数 SO 实现一个 ISuperObject 接口非常方便; 前面都是给它一个字符串参数, 它的参数可以是任一类型甚至是常数数组. SA 和 SO 都是返回一 ISuperObject;SO 可以产生一个 stArray 类型的 ISuperObject, 但 SA 只会产生 stArray 类型的 ISuperObject;SA 的参数也只能是常数数组. unit Unit1; interface uses   Windows, Messages, Sys

[Effective JavaScript 笔记] 第14条:当心命名函数表达式笨拙的作用域

js函数会根据上下文改变其含义. function double(x){return x*2;} 这是一个函数声明,也可以是一个命名函数表达式(named function expression),取决于它出现的地方. 声明一个函数,并绑定一个当前作用域的变量. 同一段函数代码也可以作为一个表达式. var f=function double(x){return x*2;} 根据ECMAScript规范,该函数绑定到变量f,而不是变量double.这里给函数表达式命名并不是必要的的,可以直接使用

14、位置参数+随机数+数组+函数

位置参数: linux 程序中会大量用到位置参数,位置参数就形如: mkdir a b c d e f g 在以上程序中 mkdir 它自己也是一个参数,它个参数用 $0 表示 后面的参数用 $1 (a) $2(b) $3 (c) 最多到 $10,如果超10,那要用 shift 进行参数移位 参数移位 参数移位就是把后面(右边)的参数,往前(左边)移动,最前面(左边)的参数 覆盖(删除)了,整个参数个数也会少1. 例: a b c d e f g h || || shift || b c d e

随想14

合法的洗脑被称为教育,不合法的教育被称为洗脑. 洗脑和教育两个词语是描述了同一件事的词语,只是用在不同的环境上. 请做如下一套试卷. 一.选择题.(每题5分) 1.强盗是()[正确答案:A] A.正义的 B.善良的 C.美丽的 D.强壮的 2.地痞是()[正确答案:B] A.勇敢的 B.美好的 C.强大的 D.无畏的 二.填空题.(每题5分) 1.强盗是____.[正确答案:正义的] 2.地痞是____.[正确答案:B] 三.问答题:(每题10分) 1.请描述一下强盗对于社会的必要性. [标准答

C语言 指针基础篇 数组,函数与指针的运用 2 14

下面看看如何在函数中运用指针吧 下面是往函数传入指针的简单操作,不是传入数组的.判断一个a是否大于b是的话给,是的话对其进行操作,不是的话就直接返回. 1 #include <stdio.h> 2 int main(){ 3 int num1,num2,*p1,*p2; 4 p1 = &num1,p2=&num2; 5 scanf("%d%d",&num1,&num2); 6 7 int fun(int *n1,int *n2); //我们在

Python基础篇【第六篇】:函数补充

三元运算 三元运算(三目运算),是简单的条件的语句缩写. Python没有三目运算符但是可以用if else语句实现相同的功能: #!/usr/bin/env python3 #三元运算格式 #result = 值1 if 条件 else 值2 #如果条件成立,那么值1赋值给变量result,否则将值2赋给result变量 #实例: result = True if 1 > 0 else False print(result) #运行结果 True lambda表达式 通过三元运算可以很快完成简

select 函数1

Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect.accept.recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回).可是使用Select就可以完成非阻塞(所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不

10天精通Sass 之 处理字符串与数字的函数

Sass的函数简介 Sass中自备了一系列的功能函数,包括: - 字符串函数 - 数字函数 - 列表函数 - 颜色函数 - Introspection函数 - 三元函数 除了Sass中已提供的函数,我们还可以根据自己的需求定义函数,称为自定义函数. 字符串函数 * unquote($string) * :删除字符串中的引号 * quote($string) * :给字符串加引号 unquote()函数 用来删除字符串的引号,如果这个字符串没有引号,则返回原始字符串. .test1 { conte