duangsuse::Echo
> 说实话java的 notnull String+null会报出空指针异常真的是缺德啊(所以养成了String==null?"":String的不良习惯 提到这个,就不得不说 string concatenation 的标准了... 另外 null 就是 null,String 肯定是 Object 啦,好像不能认为 null 是一种 Object 不过我不知道为啥这里有个 String#isNullOrEmpty.... emmm 我以为是应该抛 NPE 的(OOP 的方法调用 receiver 是空)…
Java 9 以上会使用 StringConcatFactory 的 makeConcatWithConstants 来进行转换(不过也能拿到相同的结果)
然后 Java 8 会生成以下的字节码
看起来就是把 null 作为 Object 往 StringBuilder 里赛了
然后 Java 8 会生成以下的字节码
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=3, locals=1, args_size=1
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: new #3 // class java/lang/StringBuilder
6: dup
7: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V
10: ldc #5 // String a
12: invokevirtual #6 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
15: aconst_null
16: invokevirtual #7 // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
19: invokevirtual #8 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
22: invokevirtual #9 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
25: return
LineNumberTable:
line 3: 0
line 4: 25看起来就是把 null 作为 Object 往 StringBuilder 里赛了
jshell> StringBuilder builder = new StringBuilder()
builder ==>
jshell> builder.append("a")
$2 ==> a
jshell> builder.append((Object)null)
$3 ==> anull
duangsuse::Echo
Java 9 以上会使用 StringConcatFactory 的 makeConcatWithConstants 来进行转换(不过也能拿到相同的结果) 然后 Java 8 会生成以下的字节码 public static void main(java.lang.String[]); descriptor: ([Ljava/lang/String;)V flags: (0x0009) ACC_PUBLIC, ACC_STATIC Code: stack=3, locals=1…
搞基 Jawa9
这厮怕是要能优化别人
这厮怕是要能优化别人
final as = new String[] {"a", "v", "c"};
String fin = "";
for (String a : as) {
fin = fin + a;
}
这种程序了唉,没用的,只有讨论那些有前途的工程技术才可能有人看,我这种人.... 呃.... 你们懒得看。
什么 C 啊、Haskell 啊、编译器啊、静态分析静态检查啊、关系代数啊,算法啊、操作系统啊、软件工程理论啊.... 如果只是作为『赠品』都是浮云
流行的就是那么一点,一招鲜吃遍天,开始的专业得选流行的做才好。
我以后要是上大学,不管专科本科,就和 drakeet 一样,我要学开发,写应用。
偶尔写点好玩点的库什么的... 虽然应用层真的是水浅... 真的就是无脑的堆积,没意思的复制抄改.... 离了网络不能编程...
我真的不想总是写没有 GUI 没有 pattern 的东西,但是也没时间写那些比较耗时的... emmm....
有前途多好... 🙁
计算机科学... 有什么前途
看上次华为吹的,还不如让几个计算机科学的过来整呢。
什么 C 啊、Haskell 啊、编译器啊、静态分析静态检查啊、关系代数啊,算法啊、操作系统啊、软件工程理论啊.... 如果只是作为『赠品』都是浮云
流行的就是那么一点,一招鲜吃遍天,开始的专业得选流行的做才好。
我以后要是上大学,不管专科本科,就和 drakeet 一样,我要学开发,写应用。
偶尔写点好玩点的库什么的... 虽然应用层真的是水浅... 真的就是无脑的堆积,没意思的复制抄改.... 离了网络不能编程...
我真的不想总是写没有 GUI 没有 pattern 的东西,但是也没时间写那些比较耗时的... emmm....
有前途多好... 🙁
计算机科学... 有什么前途
看上次华为吹的,还不如让几个计算机科学的过来整呢。
This media is not supported in your browser
VIEW IN TELEGRAM
duangsuse::Echo
唉,没用的,只有讨论那些有前途的工程技术才可能有人看,我这种人.... 呃.... 你们懒得看。 什么 C 啊、Haskell 啊、编译器啊、静态分析静态检查啊、关系代数啊,算法啊、操作系统啊、软件工程理论啊.... 如果只是作为『赠品』都是浮云 流行的就是那么一点,一招鲜吃遍天,开始的专业得选流行的做才好。 我以后要是上大学,不管专科本科,就和 drakeet 一样,我要学开发,写应用。 偶尔写点好玩点的库什么的... 虽然应用层真的是水浅... 真的就是无脑的堆积,没意思的复制抄改.... 离了网络不能编程...…
恕我直言,应用层真的是浅薄...
比如说,你只需要知道几个名字就可以写代码...
比如 Android 的 support annotations,
@MainThread @WorkerThread @NonNull @Nullable @RequireApi @RestrictTo
比如那个 LayoutFormatter 的 Gradle 插件,我现在就能默写下来(不包括包名,因为太长了没去记)
首先有一个 Task 对象,我们抽象的是 Task
这个 Task 要知道自己要 Format(就是 File readText/process/writeText)哪些文件,我们有 Gradle 的
这才是我不想写太多应用的理由... 有时候真的是我没有时间写应用
其次是现在写这些没意思
比如说,你只需要知道几个名字就可以写代码...
比如 Android 的 support annotations,
@MainThread @WorkerThread @NonNull @Nullable @RequireApi @RestrictTo
比如那个 LayoutFormatter 的 Gradle 插件,我现在就能默写下来(不包括包名,因为太长了没去记)
首先有一个 Task 对象,我们抽象的是 Task
这个 Task 要知道自己要 Format(就是 File readText/process/writeText)哪些文件,我们有 Gradle 的
ConfigurableFileTree 抽象@Task然后我们要有一个 Plugin 类来注册这个 Task,groovy 会
class FormatTask extends Task {
private ConfigurableFileTree xmlFiles;
public FormatTask(ConfigurableFileTree tree) { xmlFiles = tree; }
@Override public void run() {
for (File f : xmlFiles.files()) {
Path fp = sun.nio.Paths.getPath(f.toURI());
String fp_contents = new String(sun.nio.Files.readAllBytes(fp));
String fp_pretty = format(fp_contents);
Files.write(fp, fp_pretty.getBytes());
}
}
}
apply from 'path.to.class' 来 Apply 一个 Plugin 到 RootProjectclass XmlFormatterPlugin extends SimplePlugin {
@Override
public void apply(Project proj) {
final FormatTask ftask = new FormatTask(getXmlFileTree(proj));
proj.getTasks().create("format-layout", "Format Android XML Layout resources", ftask);
}
private static ConfigurableFileTree getXmlFileTree(Project proj) { return proj.fileTree(makeFileTreeArg(".", "**/*.xml")); }
private static HashMap<String, String> makeFileTreeArg(String dir, String include) {
HashMap<String, String> argt = new HashMap<>();
argt.put("dir", dir); argt.put("include", include);
return argt;
}
}
平铺直叙,毫无 ABC(Assignment、Branches、Conditions)这才是我不想写太多应用的理由... 有时候真的是我没有时间写应用
其次是现在写这些没意思
duangsuse::Echo
恕我直言,应用层真的是浅薄... 比如说,你只需要知道几个名字就可以写代码... 比如 Android 的 support annotations, @MainThread @WorkerThread @NonNull @Nullable @RequireApi @RestrictTo 比如那个 LayoutFormatter 的 Gradle 插件,我现在就能默写下来(不包括包名,因为太长了没去记) 首先有一个 Task 对象,我们抽象的是 Task 这个 Task 要知道自己要 Format(就是…
This media is not supported in your browser
VIEW IN TELEGRAM
默写错(做其他开放定义的修改后没错的除外)的有:
但是 A 类没有
.... 还有些名字的错误,不过 IDE 都可以解决了
FormatTask#run 可能抛出未捕获的异常 IOException,但是没有标记XmlFormatterPlugin 使用了 A 类实例 Project#getTasks()但是 A 类没有
create(String, String, Task): void 这个方法(但是有 create(String, Class<? extends Task>, Consumer<? extends Task>): void)Project#fileTree(Map<String, String>) 的第一个参数是 List 而非 Map.... 还有些名字的错误,不过 IDE 都可以解决了
你 block 了也没有用... 他又不看,我的处理方式就是直接 ignore 掉,和你意见性格不合的人可能很多,不喜欢直接不交往即可
反正我这个人也天生隔绝交往.... 😭
反正我这个人也天生隔绝交往.... 😭
duangsuse::Echo
所以,不如去学学计算机图形学和 GUI 交互?你可以去写个像 Tk 一样的 GUI 框架?( #gui #events
Telegram
AlPlank [Courtyard]
https://t.me/tgsucks/827
再次重申,我同意tgsucks的态度,但严重反对他的做法。
状态:
单方面离开drakeet群。
drakeet加入铝版黑名单。
drakeet 未加入铝箔个人黑名单。
drakeet 已将铝箔加入黑名单。
哦,亲爱的drakeet,去你那快乐星球更新去罢!
归去来兮!
世与我而相违,复驾言兮焉求!
#暴怒
#protected
#notAllowToPublicChat
再次重申,我同意tgsucks的态度,但严重反对他的做法。
状态:
单方面离开drakeet群。
drakeet加入铝版黑名单。
drakeet 未加入铝箔个人黑名单。
drakeet 已将铝箔加入黑名单。
哦,亲爱的drakeet,去你那快乐星球更新去罢!
归去来兮!
世与我而相违,复驾言兮焉求!
#暴怒
#protected
#notAllowToPublicChat
duangsuse::Echo
唉,没用的,只有讨论那些有前途的工程技术才可能有人看,我这种人.... 呃.... 你们懒得看。 什么 C 啊、Haskell 啊、编译器啊、静态分析静态检查啊、关系代数啊,算法啊、操作系统啊、软件工程理论啊.... 如果只是作为『赠品』都是浮云 流行的就是那么一点,一招鲜吃遍天,开始的专业得选流行的做才好。 我以后要是上大学,不管专科本科,就和 drakeet 一样,我要学开发,写应用。 偶尔写点好玩点的库什么的... 虽然应用层真的是水浅... 真的就是无脑的堆积,没意思的复制抄改.... 离了网络不能编程...…
duangsuse::Echo
Python files/lines/code/doc/blanks 6 / 1372 / 1020 / 100 / 252 一个 GIMP 插件,欲安装请速 INSTALL 待会会有功能展示和使用帮助
This media is not supported in your browser
VIEW IN TELEGRAM
跪求 star.... 好歹我也熬了两天夜啊
#dalao https://imbushuo.net/blog/ 哇 #os 底层 bootloader 程序大佬
https://github.com/WOA-Project/Lumia950XLPkg/commit/43e357324e7b4b463399df3bda1fc5b2ea96d26d#diff-a3da5a6877d93e06aac549c28ba9bcde
https://github.com/WOA-Project/Lumia950XLPkg/commit/43e357324e7b4b463399df3bda1fc5b2ea96d26d#diff-a3da5a6877d93e06aac549c28ba9bcde
GitHub
PlatformBm: Update boot text for amusement purposes. · WOA-Project/Lumia950XLPkg@43e3573
Well, we have to force @kotomei to study for the National College Entrance Exam.
这里不针对任何人,只是有感而发,对不起冯老师了...
有时候觉得说国内的 #Android 大佬...
很多时候不过就是应用层的开发人员而已,连框架都没写过...
也做不出什么有创意的东西来...
也不真正了解自己处在的 Android 平台
也不尝试去理解任何图形界面应用,Desktop 还是 Mobile 的 common pattern
也不去多学习一点,多提升自己....
也不学学 Google, Square, Bumptech, GuardSquare, Xposed, Magisk, Anko, Realm, JakeWharton, ASM, Groovy, SpringBoot 那样,做点能广为人用的东西出来...
最多也就弄个可能很平凡容易复制的平台而已... 那种耗时却不需要什么不错的点子的东西,而且重视营销,老是喜欢抄...
我很困惑... 我觉得这种一直在当码农从来没做过太多事情的大佬真的不应该叫大佬...
难道中国的程序员全都是这样的?都只有一点行动力?都没有多么高的编程功底?
中国有大佬,也有做 Android 开发的大佬,可是我觉得平时能看到对一切都有点理解或者最基础的了解的人,还是少数...
有时候觉得说国内的 #Android 大佬...
很多时候不过就是应用层的开发人员而已,连框架都没写过...
也做不出什么有创意的东西来...
也不真正了解自己处在的 Android 平台
也不尝试去理解任何图形界面应用,Desktop 还是 Mobile 的 common pattern
也不去多学习一点,多提升自己....
也不学学 Google, Square, Bumptech, GuardSquare, Xposed, Magisk, Anko, Realm, JakeWharton, ASM, Groovy, SpringBoot 那样,做点能广为人用的东西出来...
最多也就弄个可能很平凡容易复制的平台而已... 那种耗时却不需要什么不错的点子的东西,而且重视营销,老是喜欢抄...
我很困惑... 我觉得这种一直在当码农从来没做过太多事情的大佬真的不应该叫大佬...
难道中国的程序员全都是这样的?都只有一点行动力?都没有多么高的编程功底?
中国有大佬,也有做 Android 开发的大佬,可是我觉得平时能看到对一切都有点理解或者最基础的了解的人,还是少数...
Forwarded from 芝士和培根 (YuutaW 鱼塔)
这里推荐一下冯老师 ( @oasisfeng ) 的 Twitter: https://twitter.com/oasisfeng 。冯老师不仅是一位 Android 界高手,他的 twitter 也非常有含金量,推荐关注。
#未分类
#未分类
X (formerly Twitter)
Oasis Feng (@oasisfeng) on X
Ancient Geeeek, Life Hacker, Indie Developer, Economics Rookie
#sb (撕逼) #China #android https://t.me/dsuse/10339
其实我很喜欢撕逼?(跑
其实我只是想围观
好不容易我看到了 drakeet 以他的新性格又被卷入了撕逼中....
话说我的性格变了吗?肯定变了,但是我自我感觉我依然是友好的(
虽然 drakeet 的确是有理.... 但如上所说,我很感兴趣这些...
其实 drakeet 的老性格就有可能会引发撕逼了已经...
比如说他之前『自己都看不懂』的『混淆技术』,我要发肯定语气就会弱一点,至少不会... 显得他容易自满...
虽然他之前的确是有努力的,可是这自满... 怎么说,而且他离开大学之后也未必又真的技术上有太大的进步。
真的最好不要自满的。"满招损""谦受益"
原因大家都知道,想想身边那些不受欢迎的人,30% 左右都是不能“正确“认识自己和别人遭致各种冲突的
当然关于这件事情技术上的问题,我后来在自己的频道发了自己的理由:
某排序算法:5 没有被手动排序过,5 在 1 前面,4 被手动排序过,4 也在 1 前面,可 5 和 4 谁在谁前?
===========
真的有完人吗?你觉得自己的技术到现在完整了吗? 🤔
这是一个值得我们去思考的问题。
《逍遥游》(又胡乱扯)里把鹏和蜩与鴬鸠做了对比:
我本来就已经很菜了,希望我永远都不要是完人,要不然,我真的没法混了(跑路)🙈
我自己是怎么样的,我就不说了,但是这里有一个答案:
#Zhihu 回答:你在编程的过程中会通过做出一点东西而觉得自己比周围人厉害很多从而获得爽感吗?
note: 上面加『』的原因是,我觉得『使用某某工具』不能拿来吹,所以有点点奇怪的感觉...
其实我很喜欢撕逼?(跑
其实我只是想围观
好不容易我看到了 drakeet 以他的新性格又被卷入了撕逼中....
话说我的性格变了吗?肯定变了,但是我自我感觉我依然是友好的(
虽然 drakeet 的确是有理.... 但如上所说,我很感兴趣这些...
其实 drakeet 的老性格就有可能会引发撕逼了已经...
比如说他之前『自己都看不懂』的『混淆技术』,我要发肯定语气就会弱一点,至少不会... 显得他容易自满...
虽然他之前的确是有努力的,可是这自满... 怎么说,而且他离开大学之后也未必又真的技术上有太大的进步。
真的最好不要自满的。"满招损""谦受益"
原因大家都知道,想想身边那些不受欢迎的人,30% 左右都是不能“正确“认识自己和别人遭致各种冲突的
世界著名的发明家爱迪生,晚年变得骄傲自负,甚至对手下的人说:"不要向我建议什么,任何高明的建议也超越不了我的思维。"这样,他堵塞了自己智慧的源泉,丧失了前进的动力,也就不可能再有什么重大的发明了。对比一下 drakeet 回复我『或许可以实现支持手动排序的同时自动排序剩余项?』消息的态度,越来越不耐烦:任何建议,如果是反对我之前哪怕是可能不确定的理解,我都很难去接受
当然关于这件事情技术上的问题,我后来在自己的频道发了自己的理由:
某排序算法:5 没有被手动排序过,5 在 1 前面,4 被手动排序过,4 也在 1 前面,可 5 和 4 谁在谁前?
===========
真的有完人吗?你觉得自己的技术到现在完整了吗? 🤔
这是一个值得我们去思考的问题。
《逍遥游》(又胡乱扯)里把鹏和蜩与鴬鸠做了对比:
“当鹏飞往南海时,水浪击起达三千里,借着旋风盘旋直上九万里,它是乘着六月的大风飞去的。”野马般奔腾的雾气,飞扬的灰尘,以及生物都是被风所吹而飘动的。天色苍茫,难道是它真正的颜色吗?还是因为太远太高,看不到它的边际呢?鹏往下看,也是这样罢了。再说,水蓄积得不深厚,那么它就没有力量负载起大船。把一杯水倒在堂上的低洼之处,一根小草就可以成为船。如果把一个杯子放上去,就会被粘住,这是因为水浅而船大了。风力积蓄得不大,就没有力量承载巨大的翅膀。所以鹏高飞九万里,那风就在它的下面,然后它才可以乘风而行。鹏背负着青天而无所拦阻,然后才开始向南飞行。或许,怎么看自己的技术水平,就是对自己预期的『小大之辩』吧
蝉和小斑鸠讥笑鹏说:“我们奋力而飞,碰到榆树和檀树就停止,有时飞不上去,落在地上就是了。何必要飞九万里到向南海去呢?”到近郊去的人,只带当天吃的三餐粮食就可当天回来,肚子还是饱饱的。到百里外的人,就要准备一宿的粮食。到千里外的人,要聚积三个月的粮食。蝉和小斑鸠这两只小虫又知道什么呢。
我本来就已经很菜了,希望我永远都不要是完人,要不然,我真的没法混了(跑路)🙈
我自己是怎么样的,我就不说了,但是这里有一个答案:
#Zhihu 回答:你在编程的过程中会通过做出一点东西而觉得自己比周围人厉害很多从而获得爽感吗?
note: 上面加『』的原因是,我觉得『使用某某工具』不能拿来吹,所以有点点奇怪的感觉...
Telegram
duangsuse::Echo
> 说实话java的 notnull String+null会报出空指针异常真的是缺德啊(所以养成了String==null?"":String的不良习惯
提到这个,就不得不说 string concatenation 的标准了...
另外 null 就是 null,String 肯定是 Object 啦,好像不能认为 null 是一种 Object
不过我不知道为啥这里有个 String#isNullOrEmpty.... emmm 我以为是应该抛 NPE 的(OOP 的方法调用 receiver 是空)…
提到这个,就不得不说 string concatenation 的标准了...
另外 null 就是 null,String 肯定是 Object 啦,好像不能认为 null 是一种 Object
不过我不知道为啥这里有个 String#isNullOrEmpty.... emmm 我以为是应该抛 NPE 的(OOP 的方法调用 receiver 是空)…
Forwarded from 层叠 - The Cascading
「纯纯写作」的开发者 Drakeet 决定将分享平台从 Telegram 移动到知识星球。相关公告中也提出了 Telegram 频道不适合此种分享的几个理由。
说得挺对的。Telegram 频道确实对评论也不是很友好。在分享这件事上,也不能指望它能和知识星球这样的专门平台一样好。
原文:https://t.me/drakeets/1605
说得挺对的。Telegram 频道确实对评论也不是很友好。在分享这件事上,也不能指望它能和知识星球这样的专门平台一样好。
原文:https://t.me/drakeets/1605
#web https://railsgirlsjr.com/guides/sc/
复习了一下 MVC
首先,基本任何应用程序都需要依赖管理和运行时
所以有 GEM Management 和 RVM
然后,Web 框架所谓框架,就是要能自行的根据提供的信息做一些自动化完成的事情
所以有 Rails Generators
然后是 MVC
MVC 有一个流行的概念,REST,表述式状态转移,把实体的状态变动映射到 HTTP 和 URL 上,被映射的实体集合被称为 Resources
MVC,首先第一个是 "M", Model
Model, data model, 你的数据模型,Rails 有 ActiveRecord ORM
第二个是 "C", Controller
Controller,控制器,是暴露数据模型为可操作(比如,CRUD,Create-Read-Update-Delete)的一种方式,控制器绑定到一个『context path』提供指定域(比如 user, comment, admin)的服务访问
Rails 提供的抽象是 ActiveController
第三个是 "V", View
View,视图,美是智慧的体现,只要有了 Windows,DOS 没人会用
Rails 提供了 Ruby 内置的模板系统,ERB,Embedded Ruby 结合 ERB 模板来展示数据
模板语言是这样的(HTML,ERB):
ETML_ADDS = <<EERB
<!DOCTYPE html PUBLIC>
<html lang="en">
<body>
<ul>
<% [1,2,3].each do |i| %>
<li><%= i %> + 1 = <%= i + 1 %></li>
<% end %>
</ul>
</body>
</html>
EERB
<ul>
<li>1+ 1 = 2</li>
<li>2+ 1 = 3</li>
<li>3+ 1 = 4</li>
</ul>
至于模板程序相信都会写啦(跑路
简而言之,<%%> 里的是 Ruby 处理的代码,给 Ruby(可能是给下文的 %= 用的)
<%=%> 里面的是 Ruby 输出的代码,给 Ruby 处理求值,结果输出
其他的是不相干的东西,直接输出。
吐槽一下,Ruby 怎么没有强行按照关键字传递参数的功能...
复习了一下 MVC
首先,基本任何应用程序都需要依赖管理和运行时
所以有 GEM Management 和 RVM
然后,Web 框架所谓框架,就是要能自行的根据提供的信息做一些自动化完成的事情
所以有 Rails Generators
然后是 MVC
MVC 有一个流行的概念,REST,表述式状态转移,把实体的状态变动映射到 HTTP 和 URL 上,被映射的实体集合被称为 Resources
MVC,首先第一个是 "M", Model
Model, data model, 你的数据模型,Rails 有 ActiveRecord ORM
第二个是 "C", Controller
Controller,控制器,是暴露数据模型为可操作(比如,CRUD,Create-Read-Update-Delete)的一种方式,控制器绑定到一个『context path』提供指定域(比如 user, comment, admin)的服务访问
Rails 提供的抽象是 ActiveController
第三个是 "V", View
View,视图,美是智慧的体现,只要有了 Windows,DOS 没人会用
Rails 提供了 Ruby 内置的模板系统,ERB,Embedded Ruby 结合 ERB 模板来展示数据
模板语言是这样的(HTML,ERB):
ETML_ADDS = <<EERB
<!DOCTYPE html PUBLIC>
<html lang="en">
<body>
<ul>
<% [1,2,3].each do |i| %>
<li><%= i %> + 1 = <%= i + 1 %></li>
<% end %>
</ul>
</body>
</html>
EERB
require 'erb'#coding:UTF-8
erb = ERB.new(ETML_ADDS, nil, '<>')
erb.filename = 'adds.html'
puts erb.src
erb.run
_erbout = +''; _erbout.<< "<!DOCTYPE html PUBLIC>\n".freeze#...
; [1,2,3].each do |i|#...
_erbout.<< " <li>".freeze; _erbout.<<(( i ).to_s); _erbout.<< " + 1 = ".freeze; _erbout.<<(( i + 1 ).to_s); _erbout.<< "</li>\n".freeze
; end
_erbout.<< "</ul>\n".freeze
<ul>
<li>1+ 1 = 2</li>
<li>2+ 1 = 3</li>
<li>3+ 1 = 4</li>
</ul>
至于模板程序相信都会写啦(跑路
简而言之,<%%> 里的是 Ruby 处理的代码,给 Ruby(可能是给下文的 %= 用的)
<%=%> 里面的是 Ruby 输出的代码,给 Ruby 处理求值,结果输出
其他的是不相干的东西,直接输出。
吐槽一下,Ruby 怎么没有强行按照关键字传递参数的功能...