Forwarded from dnaugsuz
没理由为了这种极端情况刻意优化,而且这代价…… 虽然只是 private 到 public,依然不值得
Forwarded from dnaugsuz
显然还有其他代码引用了
ThatViewHolder.listItemView,而那些代码要求 publicForwarded from dnaugsuz
那当然,因为你的 class 里面没引用者,它是 private field,又不是 protected 那
我还以为是就 public/private/protected 它会区分粗体斜体什么的呢……忘记了,有段时间没用 IDEA
class SomeClass extends YourClass 还能访问到我还以为是就 public/private/protected 它会区分粗体斜体什么的呢……忘记了,有段时间没用 IDEA
下去散步的时候想了一下 ParserKt 的 LayoutPattern 处理可选的 layout 的问题,感觉有点复杂
所谓可选的 layout,就是:
ParserKt 里限制非常大,因为是严格的 peek(1),没法预判
不过对于 if,可以定义这种
LayoutPattern 是基于 item / tail / layout 定义的,有没有 layout 也是取决于 tail 是否解析成功
但由于 ParserKt 全局严重依赖 Type nullability (也就是 Optional<T>)所以不可能在 tail 里做到区分 layout/非layout 的语法
我想到了一个方法,就是把
+ 如果结果是
+ 如果结果是
所谓可选的 layout,就是:
if p: op() #无和带不带花括号的区分方式处理上差别不太大,都是判 1 字符。
if p: #有
op1()
op2()
ParserKt 里限制非常大,因为是严格的 peek(1),没法预判
不过对于 if,可以定义这种
Pattern<Char, AST> 。LayoutPattern 是基于 item / tail / layout 定义的,有没有 layout 也是取决于 tail 是否解析成功
但由于 ParserKt 全局严重依赖 Type nullability (也就是 Optional<T>)所以不可能在 tail 里做到区分 layout/非layout 的语法
我想到了一个方法,就是把
\n 字符从 layout 的 prefix item('\n') 里拉回 tail 里,跳过 whitespace 和 ':' 后看是否换行,然后再基于整个 LayoutPattern 的结果,Piped + 如果结果是
Expr,则代表非 layout 语法,继续 read 一个 expression 并且组织 IfExpr+ 如果结果是
IfBlock,则代表 layout 语法,直接返回结果Forwarded from dnaugsuz
Arrow 实在是太可怜了,开始我看几个 parser combinator 库依赖它,还以为它是个 big guy 呢 🤪
Forwarded from dnaugsuz
ςετυθιοπασδφγηξκλζχψωννμ
ΣΕΡΤΥΘΙΟΠΑΣΔΦΓΗΞΚΛΖΧΨΩΒΝΜ
你们更喜欢哪个希腊字母(
ΣΕΡΤΥΘΙΟΠΑΣΔΦΓΗΞΚΛΖΧΨΩΒΝΜ
你们更喜欢哪个希腊字母(
Forwarded from dnaugsuz
Λrrow is a functional companion to Κotlin standard library
Forwarded from dnaugsuz
greekToSimilar = {
"οθσ": 'o',
"υμ": 'u',
"ι": 'l',
"γ": 'y',
"η": 'n',
"κ": 'k',
"χ": 'x',
"ω": 'w',
"ν": 'v'
} 🤔看来需要特殊处理def singleCharDict(pairs: str):
assert len(pairs) % 2 == 0, "unpaired"
ks, vs = map(lambda i0: [pairs[i] for i in range(i0, len(pairs), 2)], [0, 1])
return dict(zip(ks, vs))
greekSimilar = singleCharDict("lιyγnηkκxχwω")
greekSimilar.update({'o': "οθσ", 'u': "υμ"}) 然后再来个火星文生成器……
from random import choice def huoxin(text): ''.join([ choice(greekSimilar[c]) for c in text if c in greekSimilar ]) 好像不行,再来一个……
def let(op, x): return op(x) if x != None else None
def huoxin(text):
chars = [ let(choice, greekSimilar.get(c)) or c for c in text ]
return "".join(chars) huoxin("Kotlin") #'Kοtιiη'Forwarded from dnaugsuz
huoxin("Arrow is a functional companion to Κotlin standard library")
#Arrσω is a fμηctiσηaι cοmpaηiθη tσ Κοtιiη staηdard ιibrarγdef singleCharDict(pairs: str):
assert len(pairs) % 2 == 0, "unpaired"
ks, vs = map(lambda i0: [pairs[i] for i in range(i0, len(pairs), 2)], [0, 1])
return dict(zip(ks, vs))
greekSimilar = singleCharDict("lιyγnηkκxχwω"+"PΡTΤYΥIΙHΗTΓZΖXΧBΒNΝMΜ")
greekSimilar.update({'o': "οθσ", 'u': "υμ", 'E': "ΕΣΞ", 'O': "ΘΟΩ", 'A': "ΑΔΛ"}) from random import choice def let(op, x): return op(x) if x != None else None
def huoxin(text):
chars = [ let(choice, greekSimilar.get(c)) or c for c in text ]
return "".join(chars)def mapInputBy(transform, prompt = "> "):
while True:
try: print(transform(input(prompt)))
except KeyboardInterrupt or EOFError: break
def mapLongInputBy(transform, prompt = "» "):
buffer = ""
while True:
try: buffer += input(prompt)+'\n'
except KeyboardInterrupt: break
except EOFError:
print(transform(buffer))
buffer = ""def reversedMap(map, keys = lambda it: list(iter(it))):
reverseMap = {}
for (k, v) in map.items():
for key in keys(v):
reverseMap[key] = k
return reverseMap
def intoTranslateMap(map): return {ord(k): v for (k, v) in map.items()}
_huoxinBackDict = intoTranslateMap(reversedMap(greekSimilar))
def huoxinBack(text): return text.translate(_huoxinBackDict)