Kotlin具有名为Extensions的功能,允许您"扩展"任何类型(包括内置类型)而无需实际扩展它.
例如:
function Array<T>.swap(i1: number, i2: number) {
let tmp = this[i1]
this[i1] = this[i2]
this[i2] = tmp
}
let list = [1, 2, 3]
list.swap(0, 2)
console.log(list) // => 3, 2, 1
Run Code Online (Sandbox Code Playgroud)
有趣的是,与基本类型的正常扩展不同,此方法不会更改数组或其原型链.
生成的JS代码将类似于:
function _array_extensions_swap(i1, i2) {
let tmp = this[i1]
this[i1] = this[i2]
this[i2] = tmp
}
let list = [1, 2, 3]
_array_extensions_swap(list, 0, 2)
console.log(list) // => 3, 2, 1
Run Code Online (Sandbox Code Playgroud)
我想知道是否有可能在TypeScript中做同样的事情,或者是否有计划在未来支持它?
如何将时间转换为毫秒Ecto.DateTime
?
以毫秒为单位的时间是自1970年1月1日00:00:00 UTC以来经过的毫秒数.
我禁用了活动栏(最左边的带有快捷按钮的面板)。
当我搜索侧栏中显示的搜索结果时,替换文件资源管理器。完成搜索后 - 如何关闭搜索结果并再次查看文件浏览器栏?
鉴于没有带有文件结构栏快捷方式的活动栏?我尝试单击转义,但文件结果不会消失。甚至没有一个按钮来关闭它。
是否可以使 CSS Grid 中的某些列具有灵活的宽度,以适应其内容的大小?
就像图片一样 - 它是一个列表项,左侧的图像和右上角的小信息应该具有动态宽度并适合内容的大小,另外两个区域应该占用所有可用空间。
重要的是要有适合这两个区域的内容的动态宽度,而不是固定宽度,例如比默认网格行小 x 倍。
.grid-container {
display: grid;
grid-template-areas: 'small1 big1 small2'
'small1 big2 big2';
}
.grid-container > .small1 { grid-area: small1 }
.grid-container > .small2 { grid-area: small2 }
.grid-container > .big1 { grid-area: big1 }
.grid-container > .big2 { grid-area: big2 }
.grid-container > * {
margin: 5px;
padding: 5px;
border: 1px solid black;
}
Run Code Online (Sandbox Code Playgroud)
<div class="grid-container">
<div class="small1">small1<br/>small1<br/>small1</div>
<div class="small2">small2</div>
<div class="big1">big1</div>
<div class="big2">big2</div>
</div>
Run Code Online (Sandbox Code Playgroud)
当目录不为空时,会fs.rmdir
抛出错误且没有堆栈跟踪:
{ [Error: ENOTEMPTY: directory not empty, rmdir '/var/folders/cv/fhzhp3gn/T/downloads']
errno: -66,
code: 'ENOTEMPTY',
syscall: 'rmdir',
path:
'/var/folders/cv/fhzhp3gn/T/downloads' }
Run Code Online (Sandbox Code Playgroud)
为了进行比较,我尝试显式抛出假错误,请参阅fake_delete_directory
它显示堆栈跟踪(注意该/alex/projects/play.js:8:67
行):
Error: some error
at Timeout.setTimeout [as _onTimeout] (/alex/projects/play.js:8:67)
at listOnTimeout (timers.js:324:15)
at processTimers (timers.js:268:5)
Run Code Online (Sandbox Code Playgroud)
代码:
const fs = require('fs')
function delete_directory(path) {
return new Promise((resolve, reject) => fs.rmdir(path, (err) => err ? reject(err) : resolve()))
}
function fake_delete_directory(path) {
return new Promise((resolve, reject) => setTimeout(() => reject(new Error("some error"), 1)))
}
const main = async …
Run Code Online (Sandbox Code Playgroud) 如果我在 Nim 中运行nim c -r test.nim
以下代码
echo "Hi"
Run Code Online (Sandbox Code Playgroud)
它将打印带有附加信息的结果
$ nim c -r test.nim
Hint: used config file '/usr/local/Cellar/nim/1.2.6/nim/config/nim.cfg' [Conf]
Hint: system [Processing]
Hint: widestrs [Processing]
Hint: io [Processing]
Hint: test [Processing]
CC: stdlib_system.nim
CC: test.nim
Hint: [Link]
Hint: 14204 LOC; 0.898 sec; 18.598MiB peakmem; Debug build; proj: /Users/alex/tmp/nim/test.nim; out: /Users/alex/tmp/nim/test [SuccessX]
Hint: /Users/alex/tmp/nim/test
Hi
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉它只打印结果
Hi
Run Code Online (Sandbox Code Playgroud) 这stock_symbol
是可选的,它只存在于某些公司,在 Nim 中声明它的正确方法是什么?
我必须使用ref
还是有其他方法?
type
Company = object
name: string
stock_symbol: string
echo Company(name: "Microsoft", stock_symbol: "MSFT")
echo Company(name: "Kinetic", stock_symbol: nil)
Run Code Online (Sandbox Code Playgroud)
对于复合类型也有类似的问题,通常你需要知道证券交易所和代码
type
SymbolWithExchange = object
exchange: string
symbol: string
Company2 = object
name: string
stock_symbol: SymbolWithExchange
echo Company2(
name: "Microsoft",
stock_symbol: SymbolWithExchange("NYSE", "MSFT")
)
echo Company2(name: "Kinetic", stock_symbol: nil)
Run Code Online (Sandbox Code Playgroud) 该if
如果内部使用的表达是行不通的fmt
字符串。
为什么,以及如何使它工作?
import strformat
let v = if true: 1 else: 2 # <= Works
echo fmt"{v}"
echo fmt"{if true: 1 else: 2}" # <= Error
Run Code Online (Sandbox Code Playgroud) 我需要每隔 500 毫秒定期将缓存保存到磁盘,我该怎么做?
我试过的代码没有正确编译。此外,似乎asyncCheck
应该用于错误检查。
import tables, os, asyncdispatch
var cache = init_table[string, int]()
proc save(cache: Table[string, int]): Future[void] {.async.} =
echo cache
addTimer(
timeout = 500, oneshot = false, cb = proc() = discard cache.save()
)
for i in (0..3):
cache["a"] = i
echo cache
sleep 1000
Run Code Online (Sandbox Code Playgroud) 是否可以为字符串定义类似枚举的类型?我知道枚举,但在这种情况下不想使用枚举,我想使用它,就好像它只是一个字符串一样。
type Blog = object
text: string
priority: "low" | "normal" | "high"
echo Blog(text: "something...", priority: "high")
Run Code Online (Sandbox Code Playgroud)