惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
博客园_首页
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
Hugging Face - Blog
Hugging Face - Blog
美团技术团队
小众软件
小众软件
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
有赞技术团队
有赞技术团队
WordPress大学
WordPress大学
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
罗磊的独立博客
V
V2EX
酷 壳 – CoolShell
酷 壳 – CoolShell
IT之家
IT之家
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Recent Announcements
Recent Announcements
M
MIT News - Artificial intelligence
阮一峰的网络日志
阮一峰的网络日志
The GitHub Blog
The GitHub Blog

博客园 - 方东信

【far 语言】语言文档目录 【far 语言】注解系统 【far 语言】数组 【far 语言】并发编程(协程) 【far 语言】控制流 【far 语言】异常处理 【far 语言】farcc 构建工具 【far 语言】组合与继承 【far 语言】接口与泛型 【far 语言】List 列表 【far 语言】Map 映射 【far 语言】原生内存与 FFI 【far 语言】字符串 【far 语言】语法总览 【far 语言】类型系统 Java 远程调用类,控制类的办法,老了,记不住了。靠 java opc ua 基于s7 音视频:JavaCV 采集桌面画面并显示的方法 pand3d实现服务端渲染并推流 UI弹窗遮罩屏蔽触发事件的处理 far的数据类型 Windows下Tesseract-OCR的安装与使用 LoRA配置 大模型三阶段训练方法(LLaMa Factory) windows系统下anaconda的安装和使用 trl ppo 【手把手从零实现】Qwen2.5-VL:环境配置/功能实验(图片识别理解、目标检测、文字OCR、文档解析、视频理解)/模型微调(MS-Swift 和 LLaMA-Factory) seata 1.8.0 报错大全 Springboot 报错 java.lang.IllegalStateException: block()/blockFirst()/blockLast() are blocking vLLM部署多模态大模型Qwen2.5-VL-3B-Instruct
【far 语言】函数
方东信 · 2026-09-13 · via 博客园 - 方东信

本文是「far 语言」系列文档之一,总目录见《【far 语言】语言文档目录》。

方法与匿名函数

方法定义

class App {
    // 静态方法:默认返回 0,可不写 return
    static long sum(long a, long b){
        return a + b;
    }

    // 实例方法(不加 static,用 this 访问)
    long doubleIt(long v){
        return v * 2;
    }

    static long main(string args[]){
        long r = this::sum(3, 4);      // 静态方法用 :: 调用
        App app = new App();
        long d = app.doubleIt(5);      // 实例方法用 . 调用
        return 0;
    }
}
  • 静态成员:用 ::this::method() / this::field / 类名::field)。
  • 实例成员:用 .this.method() / this.field / obj.method())。
  • :: 仅用于静态;实例字段用 :: 会编译报错。

参数默认值

// 带默认值的参数必须放在最后
static long greet(string name, long times = 1){
    for(long i = 0; i < times; i++){
        println("你好," + name);
    }
    return 0;
}

this::greet("far");       // times = 1
this::greet("far", 3);    // times = 3

数组参数与返回

static long first(int x[3]){ return x[0]; }          // 定长
static long second(string s[]){ return s[1]; }       // 未定长
static int[] getList(){ return [1,2,3]; }            // 返回数组
static long pick(int x[] = [7,8,9]){ return x[0]; }  // 数组默认值

匿名函数

f := (x, y)-> println(x + y);        // 单行
g := (x, y)->{ return x + y; };      // 块体,最后一条表达式隐式返回

f(3, 4);    // 输出 7
  • 可捕获外部变量。
  • 修改外部变量仅对象类型生效,基本类型无法修改。

参数解构(可变参数效果)

static long test(string type, {string name, long age}){
    println(fmt("%s %s %s", type, name, age));
}

// 传 map 或数组均可
this::test("大学生", {"name":"张三", "age":21});
this::test("大学生", {"张三", 21});

// 支持默认值
static long test2(string type, {string name="far", long ok=123456}){
    println(fmt("%s %s", name, ok));
}

方法重载

同名方法可依参数列表(个数与类型)区分,编译器按实参类型择优绑定:

class Calc {
    long add(long a, long b){ return a + b; }
    string add(string a, string b){ return a + b; }   // 同名同个数、不同类型
    long add(long a, long b, long c){ return a + b + c; }  // 同名不同个数
}

Calc c = new Calc();
c.add(1, 2);          // → long 版本,3
c.add("a", "b");      // → string 版本,ab
c.add(1, 2, 3);       // → 三参版本,6
  • 判定范围仅参数列表;返回值类型不参与重载(但各重载可以返回不同类型)。
  • far 不做隐式数值转换,按精确类型匹配优先。
  • 覆写父类方法时建议加 @Override,签名写错会立刻报错(见 inherit.md)。

可变参数

形参写成 T... name(Java 风格),只能放在形参列表最后,方法体内当作普通 T[] 使用:

class Util {
    long sum(long... nums){
        long t = 0;
        long i = 0;
        while(i < nums.size()){ t = t + nums[i]; i++; }
        return t;
    }
    string join(string sep, string... parts){ /* parts 是 string[] */ }
}

Util u = new Util();
u.sum();                  // 空数组,0
u.sum(1, 2, 3);           // 打包成 [1,2,3],6
u.sum(1, 2, 3, 4);        // 10

long arr[4] = [1, 2, 3, 4];
u.sum(arr);               // 末实参本身已是 T[] ⇒ 整体直传,不二次打包,10
u.join("-", "a", "b");    // a-b
  • 零实参 ⇒ 长度 0 的空数组。
  • 末实参本身已是 T[] 时整体直传(Java 语义)。
  • 变长方法与「接受同类型数组的同名方法」不能共存(内部签名相同)。

Rust编程语言群 1036955113
java新手自学群 626070845
java/springboot/hadoop/JVM 群 4915800
Hadoop/mongodb(搭建/开发/运维)Q群481975850
GOLang Q1群:6848027
GOLang Q2群:450509103
GOLang Q3群:436173132
GOLang Q4群:141984758
GOLang Q5群:215535604
C/C++/QT群 1414577
单片机嵌入式/电子电路入门群群 306312845
MUD/LIB/交流群 391486684
Electron/koa/Nodejs/express 214737701
大前端群vue/js/ts 165150391
操作系统研发群:15375777
汇编/辅助/破解新手群:755783453
大数据 elasticsearch 群 481975850
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。