小编drh*_*gen的帖子

Scala:根据类型参数过滤集合

基于这些对象的类型参数过滤对象集合的最佳方法是什么,假设我可以控制这两个类并且我需要协变过滤?

以下是一些无法正常运行的代码:

trait Foo
case class Foo1() extends Foo
trait ReadableFoo extends Foo {def field: Int}
case class Foo2(field: Int, flag: Boolean) extends ReadableFoo
case class Foo3(field: Int, name: String) extends ReadableFoo

case class Bar[+F <: Foo](foo: F)

val seq = Seq(
  Bar[Foo1](Foo1()),
  Bar[Foo2](Foo2(1,true)), 
  Bar[Foo3](Foo3(1,"Fooz"))
)

// Should keep one
val first = seq collect {case x: Bar[Foo2] => x}

// Should keep two
val both = seq collect {case x: Bar[ReadableFoo] => x}
Run Code Online (Sandbox Code Playgroud)

现在,我知道这是因为在编译之后case x: Bar[Foo1]通过类型擦除转换case …

collections scala type-erasure

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

Scala:根据另一个参数的类型成员约束参数的类型

我有两个特征,每个特征都有一个成员的类型参数.在第一个特征中,我有一个函数,它接受第二个特征的实例和第二个特征的类型成员的实例.此函数调用第二个特征中的函数,该函数期望其类型成员的实例.但是,我无法弄清楚如何正确地参数化调用,以便这实际上有效.这是一个失败的简化示例:

trait Garage {
  type CarType <: Car
  def Cars: Seq[CarType]

  def copy(Cars: Seq[CarType]): Garage

  def Refuel(car: CarType, fuel: CarType#FuelType): Garage = {
    val car_index = Cars.zipWithIndex.find(_._1 == car).get._2

    copy(Cars.updated(car_index, car.Refuel(fuel)))
  }
}

trait Car {
  type FuelType <: Fuel
  def Fuel: FuelType

  def copy(Fuel: FuelType): Car

  def Refuel(fuel: FuelType): Car = {
    copy(fuel)
  }
}

trait Fuel
Run Code Online (Sandbox Code Playgroud)

此操作失败,并显示以下错误:

error: type mismatch;
 found   : fuel.type (with underlying type Garage.this.CarType#FuelType)
 required: car.FuelType
    copy(Cars.updated(car_index, car.Refuel(fuel)))
                                            ^
Run Code Online (Sandbox Code Playgroud)

如何约束Garage.Refuel函数以使其接受a CarFuel …

scala

3
推荐指数
1
解决办法
351
查看次数

用于识别行尾空格的上下文无关语法

我正在尝试编写一个上下文无关语法来执行一些非常简单的操作\xe2\x80\x94,将字符串解析为(1)行尾空格和(2)其他所有内容的交替部分的列表。例如:

\n\n
This.first.line...\\n..and.this....second.line\\n.\\n..and.final.line\n
Run Code Online (Sandbox Code Playgroud)\n\n

(为了可读性显示" ""."和换行符"\\n")被解析为

\n\n
"This.first.line", "...\\n..", "and.this....second.line", "\\n.\\n..", "and.final.line"\n
Run Code Online (Sandbox Code Playgroud)\n\n

我写了这个语法:

\n\n
string = raw_start | newline_start\nraw_start = raw_section [newline_start]\nnewline_start = newline_section [raw_start]\nraw_section = {any_character_except_newline}\nnewline_section = {whitespace_except_newline} new_line {any_whitespace_character}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但这是不正确的,因为{any_character_except_newline}当我希望将那些包含在new_line_section.

\n\n

是否可以说“使用空格,除非它们位于换行符之前”而不丢失语法的上下文无关属性?

\n

parsing context-free-grammar

3
推荐指数
1
解决办法
458
查看次数

Polars 选择上下文中引用早期别名的表达式

有没有办法允许 Polars 中的表达式引用先前的别名表达式?例如,定义两个新列的代码会出错,因为第二个新列引用第一个:

import polars as pl

df = pl.DataFrame(dict(x=[0, 0, 1]))

df.select([
  (pl.col('x') + 1).alias('y'),
  (pl.col('y') * 2).alias('z')],
)
# pyo3_runtime.PanicException: called `Result::unwrap()` on an `Err` value:
# NotFound("Unable to get field named \"y\". Valid fields: [\"x\"]")
Run Code Online (Sandbox Code Playgroud)

该错误表明失败是由于第一个别名对第二个表达式不可见而导致的。有没有一种简单的方法可以让这项工作发挥作用?

python-polars

3
推荐指数
1
解决办法
1821
查看次数

更新不可变序列

我在锡兰有一个序列,我想创建一个新的序列,其中一个元素根据索引替换为其他元素:

[String*] strings = ["zero", "one", "two"];
value index = 1;
value newElement= "uno";
[String*]? newStrings = ???; // should be ["zero", "uno", "two"]
Run Code Online (Sandbox Code Playgroud)

在Scala中,这称为update.

ceylon

2
推荐指数
1
解决办法
140
查看次数

在整个表格的组内排序

如果我有一个列,我可以使用该over方法在组内对该列进行排序。例如,

\n
import polars as pl\n\ndf = pl.DataFrame({\'group\': [2,2,1,1,2,2], \'value\': [3,4,3,1,1,3]})\n \ndf.with_column(pl.col(\'value\').sort().over(\'group\'))\n# shape: (6, 2)\n# \xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n# \xe2\x94\x82 group \xe2\x94\x86 value \xe2\x94\x82\n# \xe2\x94\x82 ---   \xe2\x94\x86 ---   \xe2\x94\x82\n# \xe2\x94\x82 i64   \xe2\x94\x86 i64   \xe2\x94\x82\n# \xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n# \xe2\x94\x82 2     \xe2\x94\x86 1     \xe2\x94\x82\n# \xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xbc\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n# \xe2\x94\x82 2     \xe2\x94\x86 3     \xe2\x94\x82\n# \xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xbc\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n# \xe2\x94\x82 1     \xe2\x94\x86 1     \xe2\x94\x82\n# \xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xbc\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n# \xe2\x94\x82 1     \xe2\x94\x86 3     \xe2\x94\x82\n# \xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xbc\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n# \xe2\x94\x82 2     \xe2\x94\x86 3     \xe2\x94\x82\n# \xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xbc\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n# \xe2\x94\x82 2     \xe2\x94\x86 4     \xe2\x94\x82\n# \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n

该操作的优点在于它保持了组的顺序(例如,group=1 仍然是第 3 行和第 4 行;group=2 仍然是第 1、2、5 和 …

python-polars

2
推荐指数
1
解决办法
1394
查看次数

列出AWS SSM参数存储中的所有参数

如何在AWS Systems Manager(SSM)参数存储中列出所有参数?我正在使用AWS CLI。

我可以将它们存储在一起aws ssm put-parameter。我可以拿来aws ssm get-parameter。我可以使用列出所有文档aws ssm list-documents,但是看不到相应的list-parameters功能。

amazon-web-services aws-cli aws-ssm

1
推荐指数
3
解决办法
1812
查看次数

从 Polars 中的每个组中获取元素

如何在 Polars 的每组中按索引获取元素DataFrame?例如,如果我想获取每组的第一个和第三个元素,我可能会尝试这样的操作:

import polars as pl

df = pl.DataFrame(dict(x=[1,0,1,0,1,0], y=[1,2,3,4,5,6]))

df.groupby('x').take([0,2])
# AttributeError: 'GroupBy' object has no attribute 'take'
Run Code Online (Sandbox Code Playgroud)

但这显然是行不通的。

python-polars

0
推荐指数
1
解决办法
1467
查看次数