Forwarded from dnaugsuz
with(dispatchReceiver) { extensionReceiver.doSomething(params) } 果然他们还是要搞隐式参数啊…… 但这个语法其实未必非要 ext-fun 接受“另一个 receiver(this)” ,写成 fun Float.dp(dim:Float) = this*dim 再 interface View { fun Float.dp()=/**/ } 也可以啊(不过要加的话这个用途还是窄,但也可以只加 class 内部 ext fun 的那个支持,但我很想喷他“为 logger 优化”的那个,是没学过面向对象吗)Forwarded from dnaugsuz
也算好吧, scoped extension 能加到 scope 的外面去,解决了语法只能指定 receiver 的缺陷
Forwarded from dnaugsuz
这个高级特性是,你
可以
等于有
它不解释我还以为有
语法可能最后还是会改下
interface XScope { val rate: Int; fun Int.wtf()=this*this@XScope.rate }
class X(override val rate: Int): XScope 可以
X(2).run { 1.wtf() } == 2等于有
fun (X/*下的*/,Int).wtf() = this*rate 它不解释我还以为有
fun X.wtf(): Int 呢语法可能最后还是会改下
dnaugsuz
这个高级特性是,你 interface XScope { val rate: Int; fun Int.wtf()=this*this@XScope.rate } class X(override val rate: Int): XScope 可以 X(2).run { 1.wtf() } == 2 等于有 fun (X/*下的*/,Int).wtf() = this*rate 它不解释我还以为有 fun X.wtf(): Int 呢 语法可能最后还是会改下
积极思考了一下, 绝句 里此特性能否支持。
首先这是扩展成员(extension) 查找的问题,实现不难但要增加一个case,修改二进制内子格式(作用域混入的 2*thisArg)
就目前的语法,它肯定要改。 我看到 ((A,B).() -> R) 的函数类型就误会为 (A,B)=(A|B) 了
最开始是说
后来觉得, implict
我觉得虽然有点简短 (可以用 其中 但我觉得无意义),实际写起来也容易理解
既有的 隐式 关键字好像没有用,因为它只能隐式构造器和数据类参数
首先这是扩展成员(extension) 查找的问题,实现不难但要增加一个case,修改二进制内子格式(作用域混入的 2*thisArg)
就目前的语法,它肯定要改。 我看到 ((A,B).() -> R) 的函数类型就误会为 (A,B)=(A|B) 了
最开始是说
fun B.opt(): R in A (有点 Kotlin 化,in 也有前移可能)后来觉得, implict
this 的冲突应该提上改革点,正好绝句「人称文法」的第二人称代表 作用域混入 ,就 事 B.opt():R 你 A = op(我、你的x) 这样也行我觉得虽然有点简短 (可以用 其中 但我觉得无意义),实际写起来也容易理解
既有的 隐式 关键字好像没有用,因为它只能隐式构造器和数据类参数
Forwarded from duangsuse Throws
Forwarded from AlPlank (Al Pt)
wechat 唯一一点好就是相对其他软件能稍微管住自己加 feature 的心态,让用户不需要花费太多精力在"了解怎么用上"。
这一点只有个人开发者鸽子掉的项目能比得上
这一点只有个人开发者鸽子掉的项目能比得上
Forwarded from &'a ::rynco::UntitledChannel (Rynco Maekawa)
Twitter
星咲高校地学部航天局 HGCSA
BREAKING: The first Chinese Mars rover is likely to be named Perseverance
https://t.me/AndroidDevCn/180426 内容查询器…… 好麻烦的样子
#db SQL select(projection),where,sort 都有了(还有参数 bind...)
uri=content://media/external/file
projection=[_data, orientation, title, duration, bucket_display_name]
selection=((media_type = 1 OR media_type = 3) AND (bucket_id IS NOT NULL) AND (generation_modified > ?)), selectionArgs=[1]
sortOrder=generation_modified DESC, _id DESC #db SQL select(projection),where,sort 都有了(还有参数 bind...)
Telegram
Rikka in [CN] Android Dev
先查 BUCKET_DISPLAY_NAME + BUCKET_ID
然后手动...
比一下子拿所有的可能快那么一点点 吧(
然后手动...
比一下子拿所有的可能快那么一点点 吧(
duangsuse::Echo
#ali #android 🤔支付宝好像能监听到收款码页的 音量下键截屏 ,不知道是有咕咕截屏审查 API 还是按键事件
给 Android 的 Window 加上这个 FLAG 可以告知系统该窗口含有私密内容,部分系统的实现就是禁止截屏和任务窗口里面的预览:https://developer.android.com/reference/android/view/Display#FLAG_SECURE
Forwarded from dnaugsuz
https://github.com/duangsuse-valid-projects/MinBase64 很久以前的,静态 View 单页,你可以看看
Java 新手要注意三点:
1. 不要滥用 public ,尽可能隐藏构造细节是为了便于突出重点(但如果是为了方便免写getset 则要注意排版整齐靠前)。以后写复用库如果还这么搞,不兼容修改会被人打的
不要滥用 try-catch ,确保不可能抛异常用
2.
- 算符++先后的区别是, (i++)==old_i 而 (++i)==i/*=(old_i+1)*/ ,不要相信它能“优化性能”
-
- 表达式
-
-
3. 实现软件特性,代码能简则简,网上看很酷的 trick 体验一次就够了,下个版本删了换直白的等效代码。
Java 新手要注意三点:
1. 不要滥用 public ,尽可能隐藏构造细节是为了便于突出重点(但如果是为了方便免写getset 则要注意排版整齐靠前)。
不要滥用 try-catch ,确保不可能抛异常用
catch (Exception _) {} ,可以添加 void opt() throws EXC 和 Thread.setDefaultUncaughtExceptionHandler((EXC ex) -> {}); 取代过多 catch2.
- 算符++先后的区别是, (i++)==old_i 而 (++i)==i/*=(old_i+1)*/ ,不要相信它能“优化性能”
-
@Override 都能删掉,但为明确性不应该删,继续熟悉真实的语法结构吧- 表达式
new XListener() { public void onX() } 是创建了 XListener 的一个「匿名内部类(anonymoud subclass)」实例,之所以不能只换构造参数 是因为它方法的逻辑与既有类不一致,新 Java 8 往往用 lambda (() -
> {}) 替换。-
static 的意思是「该成员(字段/getset属性/方法)与类本身 1:1 相关」-
static class 只有在 class{} 里面才该用。3. 实现软件特性,代码能简则简,网上看很酷的 trick 体验一次就够了,下个版本删了换直白的等效代码。
GitHub
duangsuse-valid-projects/MinBase64
最小化的base64编解码器(大雾),使用android.util.Base64完成底层操作(将来会加入基于Rust语言编解码器支持) - duangsuse-valid-projects/MinBase64
dnaugsuz
https://github.com/duangsuse-valid-projects/MinBase64 很久以前的,静态 View 单页,你可以看看 Java 新手要注意三点: 1. 不要滥用 public ,尽可能隐藏构造细节是为了便于突出重点(但如果是为了方便免写getset 则要注意排版整齐靠前)。以后写复用库如果还这么搞,不兼容修改会被人打的 不要滥用 try-catch ,确保不可能抛异常用 catch (Exception _) {} ,可以添加 void opt() throws EXC…
duangsuse::Echo
#ali #android 🤔支付宝好像能监听到收款码页的 音量下键截屏 ,不知道是有咕咕截屏审查 API 还是按键事件
wjm:
截屏还有另一个方法:看相册
那些个截屏就蹦出来个反馈的就差不多是这样的
检测到新媒体(相片)
duangsuse:
草 突破盲点了
截屏还有另一个方法:看相册
那些个截屏就蹦出来个反馈的就差不多是这样的
检测到新媒体(相片)
duangsuse:
草 突破盲点了
#Python #book #code 了解一下新华书店销疯了的书单:
text = """
我青年时代就读过:《西游记》《马可波罗游记》、左丘明《左传》、《我的故乡》、那楚克道尔吉、《吉檀迦利》《园丁集》《飞鸟集》 《新月集》、泰戈尔、《三国演义》《水浒传》、老子、孔子、墨子、孟子、庄子、伏尔泰、孟德斯鸠、狄德罗、卢梭、圣西门、蒙田、傅立叶、拉封丹、萨特、司汤达、莫里哀、大仲马、雨果、巴尔扎克、福楼拜、乔治桑、莫泊桑、小仲马、冉阿让、罗曼罗兰、《羊脂球》 、卡西莫多、席勒、歌德、海涅、莱布尼兹、黑格尔、康德、费尔巴哈、马克思、海德格尔、马尔库塞。
我还读过:托马斯·潘、《联邦党人文集》《常识》、梭罗、惠特曼、马克吐温、杰克伦敦、海明威《老人与海》、简奥斯汀、花兹(停顿)华斯、狄更斯、《猫》、《福尔摩斯》、卡尔马克思、弗里德里希·恩格斯、拜伦、雪莱、萧伯纳、培根、克伦威尔、约翰·洛克、托马斯·莫尔、亚当斯密、李约瑟、阿诺德·汤因比、《双城记》《雾都孤儿》《简·爱》《鲁滨孙漂流记》、汤显祖《牡丹亭》《南柯记》《紫钗记》《邯郸记》、莎士比亚、《威尼斯商人》《仲夏夜之梦》《罗密欧与朱丽叶》《第十二夜》《李尔王》《奥赛罗》《麦克白斯》,谢谢大家!
""" def sortSplit(s, sep, op): return sep.join(sorted(s.split(sep), key=op))
from re import sub
print(sub(r":(.*?)[,。]", lambda m: sortSplit(m[1], "、", lambda s: 0 if s[0]=='《' else 1), text) )def sortSplit(s, sep, op): return sep.join(sorted(s.split(sep), key=op)) #不太好看,mapSplit 合适点
from re import subprint(sub(r"(?<=:)(.*?)(?=[,。])", lambda m: sortSplit(m[1], "、", lambda s: -s.count('《')), text) )