小编Ale*_*hin的帖子

TypeScript有像Kotlin这样的扩展吗?

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中做同样的事情,或者是否有计划在未来支持它?

typescript

5
推荐指数
1
解决办法
234
查看次数

如何将时间戳转换为Elixir中的DateTime?

如何将时间转换为毫秒Ecto.DateTime

以毫秒为单位的时间是自1970年1月1日00:00:00 UTC以来经过的毫秒数.

elixir ecto

4
推荐指数
3
解决办法
3964
查看次数

VSCode - 如何关闭搜索结果侧边栏面板?

我禁用了活动栏(最左边的带有快捷按钮的面板)。

当我搜索侧栏中显示的搜索结果时,替换文件资源管理器。完成搜索后 - 如何关闭搜索结果并再次查看文件浏览器栏?

鉴于没有带有文件结构栏快捷方式的活动栏?我尝试单击转义,但文件结果不会消失。甚至没有一个按钮来关闭它。

visual-studio-code vscode-settings

4
推荐指数
3
解决办法
1593
查看次数

使 CSS Grid 中的列动态宽度尽可能小以适应上下文

是否可以使 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)

css css-grid

4
推荐指数
1
解决办法
1271
查看次数

为什么节点 fs.rmdir 错误中没有堆栈跟踪

当目录不为空时,会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)

node.js

4
推荐指数
1
解决办法
800
查看次数

如何静默 Nim 编译和运行输出?

如果我在 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)

nim-lang

4
推荐指数
1
解决办法
812
查看次数

如何在 Nim 中声明可为 null 的字段?

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)

nim-lang

4
推荐指数
1
解决办法
826
查看次数

如何在 Nim 中的格式化字符串中使用表达式?

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)

nim-lang

4
推荐指数
2
解决办法
180
查看次数

如何在 Nim 中编写异步代码以供计时器定期调用?

我需要每隔 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)

nim-lang

4
推荐指数
1
解决办法
329
查看次数

Nim 中的字符串枚举类型?

是否可以为字符串定义类似枚举的类型?我知道枚举,但在这种情况下不想使用枚举,我想使用它,就好像它只是一个字符串一样。

type Blog = object
  text:     string
  priority: "low" | "normal" | "high"

echo Blog(text: "something...", priority: "high")
Run Code Online (Sandbox Code Playgroud)

nim-lang

4
推荐指数
1
解决办法
326
查看次数