基于这些对象的类型参数过滤对象集合的最佳方法是什么,假设我可以控制这两个类并且我需要协变过滤?
以下是一些无法正常运行的代码:
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 …
我有两个特征,每个特征都有一个成员的类型参数.在第一个特征中,我有一个函数,它接受第二个特征的实例和第二个特征的类型成员的实例.此函数调用第二个特征中的函数,该函数期望其类型成员的实例.但是,我无法弄清楚如何正确地参数化调用,以便这实际上有效.这是一个失败的简化示例:
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 Car和Fuel …
我正在尝试编写一个上下文无关语法来执行一些非常简单的操作\xe2\x80\x94,将字符串解析为(1)行尾空格和(2)其他所有内容的交替部分的列表。例如:
\n\nThis.first.line...\\n..and.this....second.line\\n.\\n..and.final.line\nRun Code Online (Sandbox Code Playgroud)\n\n(为了可读性显示" "为"."和换行符"\\n")被解析为
"This.first.line", "...\\n..", "and.this....second.line", "\\n.\\n..", "and.final.line"\nRun Code Online (Sandbox Code Playgroud)\n\n我写了这个语法:
\n\nstring = 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}\nRun Code Online (Sandbox Code Playgroud)\n\n但这是不正确的,因为{any_character_except_newline}当我希望将那些包含在new_line_section.
是否可以说“使用空格,除非它们位于换行符之前”而不丢失语法的上下文无关属性?
\n有没有办法允许 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)
该错误表明失败是由于第一个别名对第二个表达式不可见而导致的。有没有一种简单的方法可以让这项工作发挥作用?
我在锡兰有一个序列,我想创建一个新的序列,其中一个元素根据索引替换为其他元素:
[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.
如果我有一个列,我可以使用该over方法在组内对该列进行排序。例如,
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\nRun Code Online (Sandbox Code Playgroud)\n该操作的优点在于它保持了组的顺序(例如,group=1 仍然是第 3 行和第 4 行;group=2 仍然是第 1、2、5 和 …
如何在AWS Systems Manager(SSM)参数存储中列出所有参数?我正在使用AWS CLI。
我可以将它们存储在一起aws ssm put-parameter。我可以拿来aws ssm get-parameter。我可以使用列出所有文档aws ssm list-documents,但是看不到相应的list-parameters功能。
如何在 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)
但这显然是行不通的。