duangsuse::Echo
719 subscribers
4.28K photos
130 videos
583 files
6.49K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
只需要按一下回车键就可以导出这一帧的图像
frame0.png
390.2 KB
This media is not supported in your browser
VIEW IN TELEGRAM
展示性地介绍一下这个插件,目前例子还没做完....
duangsuse::Echo
展示性地介绍一下这个插件,目前例子还没做完....
可以看到指针在移动就对了
Screenshot_20190503_233533.png
161.6 KB
Made with ❤️ and VisualGIMP
... NS, 我开始在 ObjectiveC 上看到的,看到的只是 NSNumber,我自以为是的解释是:Natural Signed Number... 🙈 23333
Forwarded from Rachel 碎碎念 (IFTTT)
小王喜欢用 null 表示空,词源是拉丁语 nūllus (not any)。
小张觉得直接用拉丁语 nil 更好,更短也表达了 nothing 的意思。
小周觉得用英语 None 不更便于理解?
小李觉得他们都有道理,于是同时引入了 nil null None 和 Nothing。

老李觉得,应该再引入一个 NSNull。#晦涩难懂的码农段子— Delton Ding (@DeltonDing) May 1, 2019
#CS #PL #FP #Tuby #PHP 说到现在广为资磁🐸的 Lambda(排除 Scheme 等真正依赖真正的 Lambda 的之外),

我们就来看看 🌶🐔 #Python 吧。

如果你给 Python2 一个这样的 Lambda 表达式:

(global scope)
a = 1
l = lambda: a
print(l())
# 1
compile('l=lambda: a=2', '<lambda-assign-test>', 'single')
#!> File "<lambda-assign-test>", line 1
SyntaxError: can't assign to lambda

这是怎么实现的,我想不是重点,但是 Ruby 里的确可以这么做,反观 Java 8 引入的 Lambda(Coin 项目的?哦好像就叫 Lambda 项目...),也不能『assign』
它要引入的变量,全都得是 "effective final",要不然就是『无效引用』了?为什么?其实这和程序设计语言语义背后的存储,关于值和引用之类的东西有关...

a = 1
l = ->() { a = 2 }
l.call() #=> 2
a #=> 2

正好符合我们对『a = 2 语义』的预期,Ruby 就是这样,代码块就是代码上下文中的一部分,不是独立的语法糖。
从侧面反映了 Ruby 不仅比 Python 更可读(拟态方法 vs. __init__ __ge__ 这种让人丈二和尚摸不着头脑的奇葩名字,还有反直觉的类定义项引用名字里 __ 前缀的含义),而且更函数式(跑

欸这么做啊就有一个好
,我们知道 Python 是实现了 Lexical scoping(嵌套序作用域) 的,要不然也不能这样定义这个函数:

def compose2(fn): return lambda x: lambda y: fn(x, y)

并且这样使用

compose2(print)(1)(2)

如果 Python 是 dynamic scoping(时序作用域)维护着符号表栈的话,

def get_a(): return a
a=1
get_a() #=> 1
def foo():
a=2; return get_a()
foo() #=> 1

foo() 的 a 定义就要覆盖掉 global scope 里的 a 定义了(反正这里就是一层函数调用一个作用域,还有一个 global scope)

Python 认为 Lambda 是什么呢? 它认为 Lambda 是一种 function...
欸 Python 实在是混乱邪恶... 像是 Ruby 和 Lua 的杂交体...

为什么
,你们猜? 🌚
还是说...
Forwarded from METO 的涂鸦板
PHP 7.4 开始支持箭头函数了
METO 的涂鸦板
PHP 7.4 开始支持箭头函数了
一看我好像不会 SQL 不懂 DBMS 也不能写关系代数式... 就觉得很虚
而且还没有写过需要模板功能支持的东西....

总是怕被人喷啊
今天看来做不了什么了... 时间还是太少

我只能写 RangeMap 库吧... 要是可以再弄个简单的 TextCombinator 和 BinaryReader 就好了
duangsuse::Echo
#freedom 总算能用了.... 蓐羊毛翻墙日益艰难?🌚🐕
从一周前到现在,不知道又做了些什么...
#Java #JVM 所以喜欢 Jawa 的同学们一定要注意好好学习 Java 哦!

什么是未初始化,什么是空,primitives 的默认值是什么、何时会自动初始化、何时自动装箱、Lambda 到底是什么,得分清楚

就和零基数组一样,Java 程序设计语言这么设计也是有自己的道理的,如果你看字节码,你就会发现这么做的确是符合所谓优雅性的,而不应该去做反直觉的『语法糖』
Forwarded from AlPlank (Al Pt)
魔幻的问题。

我先声明一个全局异常变量并赋值null
idea告诉我这里一定是非null(也就是在中间被赋值过)
然后我删掉了赋值……
idea告诉我可能这里没赋值??

#public
Forwarded from AlPlank (Al Pt)
说实话java的 notnull String+null会报出空指针异常真的是缺德啊(所以养成了String==null?"":String的不良习惯
Forwarded from AlPlank (神楽坂 立音)
因为你删掉 null 就是未初始化…
AlPlank
魔幻的问题。 我先声明一个全局异常变量并赋值null idea告诉我这里一定是非null(也就是在中间被赋值过) 然后我删掉了赋值…… idea告诉我可能这里没赋值?? #public
这里给同学一个我觉得有可能的情况: #PL #CS #Java

首先,我得给大家科普一下一些关于控制流的,我之前不知道而现在又知道了的名词:

+ 『短路』操作符(运算符)

这里说的『短路』是指,其连接表达式可能不会被全部求值

比如,C 里的 || (Logical OR) 和 && (Logical AND)

a || b 在 a 为 true 的时候值为 a,b 不需要被求值,否则值是 b 的值

Scheme 里这么定义,当然你也可以列真值表,不过这里不用列:

(define logical-or
(lambda (a b)
(cond
(a
#t)
(else b))))

getA() || getB() || getC()

实际上语义也可能可以这么说:

subroutine {
if (a = getA()) { return a; }
if (b = getB()) { return b; }
if (c = getC()) { return c; }
}

如果 getA() 为『真』,实际上可以说后面的表达式不会被求值
这就称为『getB(), getC()』被“短路”了(参考电子电路基础的短路)
这种操作符被称为短路操作符

a && b ,实际上经常可以认为是

subroutine {
if (a) if (b) { return true; }
return false;
}

实际上呢?上面的程序也等价于下面这个,因为 if(b) 的 else branch (语法上不存在,这里是方便理解)实际上直接 fall through 到了 return false:
if (...) .. else .. 嵌套当然还是 Java 1-11 里的就近原则

subroutine {
if (a) { if (b) return true; else return false; }
else return false;
}

#Haskell 里,因为有惰性求值,所以你可以定义自己的短路操作符,C 里面就不能定义自己的『短路函数』了(因为 C 是 pass-by-value 的,先求值函数参数再传递求值好的结果

+ 『非短路』操作符

这里就是 ^ 这种啦,就是求值不会因为某个子表达式的结果而导致子表达式不会完全求值的

XOR 的语义,其实在机器学习上也是有入门级别的交流的,XOR 要求其两个参数”不相同“

(define xor (lambda (a b)
(cond
(a (not b))
(b (not a))
(else #f))))

或者也可以这么 define (Chez Scheme 里,我现在觉得还不如直接用 Haskell 算...)

(define compose
(lambda (f g)
(lambda (args)
(call-with-values (apply g (list args)) f))))

(define (~and a b) (and a b))
(define nand (compose not ~and))
(define (xor a b) (and (or a b) (nand a b)))

欸好像有点写错了... 自己照着理解吧...

(compose (f g) 就是 (lambda x (f (g x))))

好了那前置知识基本可以了

我们来看看 IDEA 为啥可以这么说:

... 我又想废话异常是什么了... 算了不废话了

首先你们看上面的代码:

mainService:while (true) {
tryUpdate:{
Exception exception = null;
for (int i = 0; i < 2; i++) {/*...*/}
AIPtLog.errors("trying getUpdates:\n" + exception);
}
}

一个事件 while 循环,不过还打上了没有用的 tag 叫 mainService
然后是一个我没见过的语法,怎么又是我没见过的

居然还有这种语法... 我一直以为 Java 不让 goto 的... 好像是不让在循环外 goto ... 打住

labeledStatement ANTLR Java8

当然,Java 的语言标准里也有提到:
Unlike C and C++, the Java programming language has no goto statement; identifier statement labels are used with break or continue statements (§14.15, §14.16) appearing anywhere within the labeled statement.

Java 语言标准表达方式冗长严谨复杂,不适合作为第一次理解的目标来选择...

Java 这么做也是有自己的理由,至少,到处 goto 不利于结构化编程。

然后进入正题...
> 我先声明一个全局异常变量并赋值null

好像不是全局的?(考虑到 JVM 的设计,平台语言的托管全局变量都只能限制到 JVM 视角的『类静态』或者说『方法区』变量吧...)
在 Java 的视角,所谓全局变量大概就是静态类变量了吧?(Kotlin 和 Scala 里都是 object 里的成员)

> 然后我删掉了赋值…… idea告诉我可能这里没赋值??
所有 Object (对对象的引用)的默认值的确是空,但是在 Java 和 JVM 的角度,却不是总是遵循这个规则,就 exception 这个方法(局部表)里的变量来说,虚拟机得为它分配一个空间,但是这个空间虚拟机不会自动把它初始化了,必须得手动赋值,在这里 Java compiler 的工作等于是帮你检查程序会不会被虚拟机接受

https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.11.8
For instance, the iload instruction (§iload) loads the contents of a local variable, which must be an int, onto the operand stack.

local variable 在使用之前得先赋值(这样才有一个能认的 Type),有时候 Java 允许你这样:

void foo() {
int a; a = 0;
System.out.println("a is " + a);
}

只是因为 Javac 通过控制流分析知道执行 println 的时候 a 肯定不是 uninitialized 而已

找了这篇文章有点参考价值,虽然非常有限