我有一个(相当复杂的)数据类型:
data SomeDataType = Constructor Blah Blah Blah | OtherConstructor Blah Yadda | YetAnotherConstructor Yadda Yadda Tittle | StillOneMoreConstructor Tittle Tattle Wish Wash
现在我发现自己需要另一个数据类型…有两个构造函数。一个与someDataType
的yetanotherConstructor
相同;另一个只存储一个double
。我有什么选择?
data WantedDataType = ConstructorName1 Double | ConstructorName2 SomeDataType
虽然这会起作用,但它也允许类似ConstructorName2$StilloneMoreConstructorTittle tattle wish Wash
这样的东西,这是没有意义的。
data WantedDataType = ConstructorName1 Double | ConstructorName2 Yadda Yadda Tittle
data WantedDataType = ConstructorName1 Double | YetAnotherConstructor Yadda Yadda Tittle
这使我认为YetanotherConstructor
实际上“假定”是它自己的数据类型:
data YetAnotherData = YetAnotherConstructor Yadda Yadda Tittle
data SomeDataType = Constructor Blah Blah Blah
| OtherConstructor Blah Yadda
| SomeYetAnotherConstructor {-!-}YetAnotherData
-- ! will make this EXACTLY isomorphic to the original
-- but is likely unnecessary
| StillOneMoreConstructor Tittle Tattle Wish Wash
data WantedDataType = ConstructorName1 Double
| ConstructorName2 {-!-}YetAnotherData
如果说someyeTanotherConstructor(yetanotherConstructor___)
和ConstructorName2(yetanotherData___)
让您很恼火,那么有一个扩展(不过我想您会认为它会让您回到起点):
{-# LANGUAGE PatternSynonyms #-}
pattern SomeYetAnother :: Yadda -> Yadda -> Tittle -> SomeDataType
pattern SomeYetAnother x y z = SomeYetAnotherConstructor (YetAnotherConstructor x y z)
{-# COMPLETE Constructor, OtherConstructor, SomeYetAnother, StillOneMoreConstructor #-}
pattern WantedYetAnother :: Yadda -> Yadda -> Tittle -> WantedDataType
pattern WantedYetAnother x y z = ConstructorName2 (YetAnotherConstructor x y z)
{-# COMPLETE ConstructorName1, WantedYetAnother #-}
这将使someyetother
和wantedyetother
像数据构造器一样工作(完成覆盖检查(complet
pragmas)、模式匹配和构造)。当您不关心YetanotherData
是每个类型自己的单元时,您可以使用它们对每个类型进行构造/匹配;如果您希望将YetanotherConstructor
视为一个单元,则可以使用基础的SomeYetanotherConstructor
和ConstructorName2
构造函数。后者可用于例如。
someToWantedByYet :: SomeDataType -> Maybe WantedDataType
someToWantedByYet (SomeYetAnotherConstructor y) = Just $ ConstructorName2 y
someToWantedByYet _ = Nothing
wantedToSomeByYet :: WantedDataType -> Maybe SomeDataType
wantedToSomeByYet (ConstructorName2 y) = Just $ SomeYetAnotherConstructor y
wantedToSomeByYet _ = Nothing
所以我有这个错误,使用robolectric。
问题内容: 这是一段代码,作为示例,其余的只是方法(迷宫类的底部)。所以当实例化时,使用 和 这将打印出网格阵列。这是合法的吗?我认为所有类都需要构造函数,它如何打印出二维网格数组? 迷宫课: 问题答案: 不需要 显式 定义构造函数;但是,所有类都必须具有构造函数,如果不提供任何默认构造函数,则将生成默认的空构造函数: 请参见默认构造函数。
我知道数据类就像kotlin中的简单模型一样,默认情况下带有getter和setter,并且非常简单: 是否可以为该数据类声明第二个构造函数?
我正试图做到这一点: 然而,类型擦除似乎会去除字符串,所以当我调用时,我会返回一个原始
我的问题是关于OOP(C)中的构造函数。当我在一个类中将默认构造函数定义为private,并且在main中将该类的一个对象初始化为default时,就会出现默认构造函数不可访问的错误。这很好。但我也在Public部分中使用默认参数构造函数,当我再次在main中初始化对象时,就会出现对函数重载的不明确调用。所以我的问题是,如果不能从main访问私有构造函数,那么编译器应该调用公共部分中的构造函数,这
问题内容: 单元测试对我来说是新手,而我却不明白这个错误。我有2个TestCases子类,它们在独立运行时可以正常运行,但在我的测试套件中却不能。 在测试套件(下面的AllTest类)中,前三个可以正常工作,但是AvailableResouresTest和ModelTest会生成错误。 我怀疑这与以下事实有关:我必须在AllTest中导入这两个类(并且只有它们),而它们都位于同一包中。 我使用Ec