以下是我的用例
Config
使用lift-json将配置文件反序列化到我的case类,然后使用Cats验证它.我用这个作为指导.我的问题是指南中给出的例子,属于类型
case class Person(name: String, age: Int)
def validatePerson(name: String, age: Int): ValidationResult[Person] = {
(validateName(name),validate(age)).mapN(Person)
}
Run Code Online (Sandbox Code Playgroud)
但在我的情况下,我已经将我的配置反序列化为我的case类(下面是一个示例),然后我将它传递给验证
case class Config(source: List[String], dest: List[String], extra: List[String])
def vaildateConfig(config: Config): ValidationResult[Config] = {
(validateSource(config.source), validateDestination(config.dest))
.mapN { case _ => config }
}
Run Code Online (Sandbox Code Playgroud)
这里的区别是mapN { case _ => config }
.因为我已经有一个配置,如果一切都有效,我不想从其成员重新创建配置.这是因为我传递配置以验证功能而不是它的成员.
我工作场所的一个人告诉我这不是正确的方法,因为Cats Validated提供了一种构造对象的方法,如果它的成员有效.如果对象的成员无效,则该对象不应存在或不应该是可构造的.这对我来说完全合情合理.
我应该做出任何改变吗?以上我在接受吗?
PS:上面的Config只是一个例子,我的真实配置可以有其他案例类作为其成员,它们本身可以依赖于其他案例类.
我有一组配置JSON文件,如下所示:
{
"version" : 1.0,
"startDate": 1548419535,
"endDate": 1558419535,
"sourceData" : [...] // nested json inside the List.
"destData" : [...] // nested json inside the List.
"extra" : ["business_type"]
}
Run Code Online (Sandbox Code Playgroud)
有几个这样的配置文件.它们是固定的,只驻留在我的代码目录中.每个配置文件的内部表示由我的case类给出Config
:
case class Attribute(name: String, mappedTo: String)
case class Data(location: String, mappings:List[Attribute])
case class Config(version: Double, startDate: Long, endDate: Long, sourceData: List[Data],
destData: List[Data], extra: List[String])
Run Code Online (Sandbox Code Playgroud)
我有三个班Provider
,Parser
和Validator
.
Provider
有一个方法getConfig(date: Long): Config
.它必须返回满足的配置startDate <= date <= endDate
(理想情况下,应该存在一个这样的配置,startDate …
在以下示例中(scala 2.11和play-json 2.13)
val j ="""{"t":2.2599999999999997868371792719699442386627197265625}"""
println((Json.parse(j) \ "t").as[BigDecimal].compare(BigDecimal("2.2599999999999997868371792719699442386627197265625")))
Run Code Online (Sandbox Code Playgroud)
输出为-1
。他们不应该平等吗?在打印解析的值时,它会打印四舍五入的值:
println((Json.parse(j) \ "t").as[BigDecimal])
给 259999999999999786837179271969944
是什么原因
trait Dog {
def bark = "woof"
}
object Dog extends Dog
Run Code Online (Sandbox Code Playgroud)
有效,但以下内容不起作用
trait Dog {
def bark = "woof"
}
class Dog extends Dog
Run Code Online (Sandbox Code Playgroud)
我在某处读到,在上述第一种情况下,该对象不是伴随对象。对象和特征应具有相同的名称时会发生什么情况?
问题
I want to create a page with a code editor embedded in it.I looked up codemirror
but i am having problems using it as i am new to java script.
Run Code Online (Sandbox Code Playgroud)
所以我正在寻找一种简单的方法将代码编辑器嵌入到页面中(使用java脚本或python).有人请为它提供一些链接/教程或方法.
以下是我在C++中的代码部分
class Myclass
{
public:
vector< vector<int> >edg(51); // <--- This line gives error
// My methods go here
};
Run Code Online (Sandbox Code Playgroud)
注释中标记的行给出了错误:
expected identifier before numeric constant
expected ‘,’ or ‘...’ before numeric constant
但是当我执行以下操作时,它会编译而不会出错
vector< vector<int> >edg(51); // Declaring globally worked fine
class Myclass
{
public:
// My methods go here
};
Run Code Online (Sandbox Code Playgroud)
我想通了,即使我只是vector < vector<int> >edg
在第一种方法中定义它工作正常,所以问题在于常数大小51
,我似乎并不理解.我试过谷歌搜索,但由于我的oop的概念很弱,我不太了解,有谁能解释为什么会发生这种情况?
在以下情况下
class A(name:String, job:String)
{
def profile = name + " " + job
}
class B(name:String, job:String)
{
val a = new A(name,job)
val b = a.profile
}
Run Code Online (Sandbox Code Playgroud)
关于初始化B
和覆盖val a
val b = new B("Sasha","Day dream")
{ override val a = new A("John-Wick","Kill") }
Run Code Online (Sandbox Code Playgroud)
我得到NullPointerException
了val b = a.profile
。我的问题是为什么重写的val
null?做上面的事情是不好的做法吗?
我不得不使用一种数据结构,它将元素保持在某种顺序,以便我可以查询最少元素并有效地插入新元素set ( C++ stl)
.所以我选择了
.这需要log(n)
时间,插入和log(n)
用于删除至少元件.
所以我写了以下程序:
#include<iostream>
#include<set>
#include<stdio.h>
using namespace std;
int main()
{
set<int>s1,s2;
set<int>::iterator it;
int tmp,i;
for(i=1;i<=1000000;i++)s1.insert(i);
for(i=1;i<=1000000;i++)
{
it=s1.begin();
s2.insert(*it);
s1.erase(s1.begin());
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但这需要1.67
我的机器上的秒数(我的核心3)我期望更少,O(log(1000000)*1000000)
即2*10^7
我尝试优先级队列也给了我相同的性能.那么我应该实现自己的堆以使其更快或有其他方式吗?
scala ×5
c++ ×2
scala-cats ×2
validation ×2
functor ×1
javascript ×1
oop ×1
overriding ×1
play-json ×1
python ×1
traits ×1
version ×1