我有一个带有(某种)getter 方法的数据类。
此代码按预期工作:
from dataclasses import dataclass
@dataclass()
class A:
def get_data(self):
# get some values from object's fields
# do some calculations
return "a calculated value"
@dataclass()
class B(A):
def get_data(self):
data = super().get_data()
return data + " (modified)"
b = B()
print(b.get_data()) # a calculated value (modified)
Run Code Online (Sandbox Code Playgroud)
但是,如果我添加slots=True,我会得到TypeError:
from dataclasses import dataclass
@dataclass(slots=True)
class A:
def get_data(self):
return "a calculated value"
@dataclass(slots=True)
class B(A):
def get_data(self):
data = super().get_data()
return data + " (modified)" …Run Code Online (Sandbox Code Playgroud) 一个例子:
interface IResourceService {
(url: string, paramDefaults?: any,
actions?: any, options?: IResourceOptions): IResourceClass<IResource<any>>;
}
Run Code Online (Sandbox Code Playgroud)
语法(variable: type): Type;是什么意思?我怎样才能实现这个接口?
我刚刚开始学习 Haskell。Prelude 被描述为默认模块:
Prelude:标准模块。Prelude 默认导入到所有 Haskell 模块中
但这并不能解释为什么各种文档在 REPL 中都以“Prelude”作为前缀:
Prelude>
Run Code Online (Sandbox Code Playgroud)
我已经通过 Chocolatey 安装了mingw 版本,并且我的 REPL 显示“ghci”作为前缀,而不是“Prelude”:
GHCi, version 9.2.1: https://www.haskell.org/ghc/ :? for help
ghci>
Run Code Online (Sandbox Code Playgroud)
Prelude 模块已加载:
GHCi, version 9.2.1: https://www.haskell.org/ghc/ :? for help
ghci> :browse! Prelude
-- imported via Prelude
(!!) :: [a] -> Int -> a
($) :: (a -> b) -> a -> b
...
Run Code Online (Sandbox Code Playgroud)
为什么前缀不同?“Prelude”在交互式编译器中意味着什么?
假设我有一个枚举:
public enum MyEnum
{
OptionOne = 0,
OptionTwo = 2,
OptionThree = 4
}
Run Code Online (Sandbox Code Playgroud)
就像我在C#中如何将字符串转换为枚举一样?问题,我从字符串解析枚举,使用Enum.Parse方法:
public class Enumer
{
public static MyEnum? ParseEnum(string input)
{
try
{
return (MyEnum) Enum.Parse(typeof (MyEnum), input);
}
catch (ArgumentException)
{
return null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,它没有按预期使用整数,表示为字符串.
我不希望Parse.Enum()从字符串转换int,但实际上它.
一个简单的测试:
[TestClass]
public class Tester
{
[TestMethod]
public void TestEnum()
{
Assert.AreEqual(MyEnum.OptionTwo, Enumer.ParseEnum("OptionTwo"));
Assert.IsNull(Enumer.ParseEnum("WrongString"));
Assert.IsNull(Enumer.ParseEnum("2")); // returns 2 instead of null
Assert.IsNull(Enumer.ParseEnum("12345")); // returns 12345 instead of null
}
}
Run Code Online (Sandbox Code Playgroud)
只能通过两次四次检查.
Enumer.ParseEnum("2") …
System.Reactive.Subjects.Subject<T>和System.Reactive.Subjects.ReplaySubject<T>课程有什么区别?
一个不是从另一个派生的,但它们具有相同的描述并在MSDN中实现相同的接口.
我可以将Expression传递给LINQ Select()方法:
public IQueryable<T> GetInfo(long limit, Expression<Func<MyType, T>> selector)
{
return DbSet.Where(t => t.id < limit).Select(selector)
}
Run Code Online (Sandbox Code Playgroud)
如何使用LINQ样式的查询来做同样的事情?
public IQueryable<T> GetInfo(long limit, Expression<Func<MyType, T>> selector)
{
var result = from t in DbSet
where t.id < limit
select selector(t) // doesn't work
return result
}
Run Code Online (Sandbox Code Playgroud) 此代码按预期工作:
from dataclasses import dataclass
@dataclass(slots=False, init=False)
class Test:
field: str = "default value"
print(Test()) # outputs "Test(field='default value')"
Run Code Online (Sandbox Code Playgroud)
但是,如果我更改slots为True,它会抛出 AttributeError:
AttributeError: 'Test' object has no attribute 'field'
Run Code Online (Sandbox Code Playgroud)
要解决此问题,我必须使用生成的__init__方法或显式初始化自定义方法中的所有字段__init__。这种行为背后的原因是什么?
PS 在数组通过管道时“展开”数组。
我想使用以下测试脚本来测试它:
$a = @("a", "b", "c")
$a | Write-Host
Run Code Online (Sandbox Code Playgroud)
在这种情况下,$a数组正确展开:
a
b
c
Run Code Online (Sandbox Code Playgroud)
但是,当我使用自己的函数时
Function Do-Something([Parameter(ValueFromPipeline)] $str) {
Write-Host $str
}
$a | Do-Something
Run Code Online (Sandbox Code Playgroud)
输出是:
c
Run Code Online (Sandbox Code Playgroud)
如何在自定义函数中通过管道正确处理数组元素?