我正在寻找Scala中具有与getch类似功能的函数.在使用控制台时,我希望我的程序根据用户输入的字符显示信息(例如,如果我显示文本,则按n将显示下一页,而p显示前一页).现在我正在使用readLine或readChar,但是他们要求用户在每次输入后按Enter键,有点烦人.另外,在Eclipse插件的解释器中,显示了输入字符,尽管我猜这可能是不可避免的.
考虑下面的代码:
#include<iostream>
#include<vector>
class A
{
public:
A(int n = 0) : m_n(n) {}
public:
virtual int value() const {return m_n;}
virtual ~A() {}
protected:
int m_n;
};
class B : public A
{
public:
B(int n = 0) : A(n){}
public:
virtual int value() const {return m_n + 1;}
};
int main(char* args[])
{
const A a(1);
const B b(3);
const A *x[2] = {&a, &b};
typedef std::vector<A> V;
V y;
y.push_back(a);
y.push_back(b);
V::const_iterator i = y.begin();
std::cout << …Run Code Online (Sandbox Code Playgroud) 假设我正在构建一个库,并且我想向用户提供某些自定义编译时错误消息.有没有办法在Scala中提供这个,也许使用注释?
这是我所处的确切情况(我不想简化它,因为害怕错过错误的原因):
在我正在工作的框架中有一个
trait RequestHeader{...}
Run Code Online (Sandbox Code Playgroud)
和另一个特点
trait Request[+A] extends RequestHeader{...}
Run Code Online (Sandbox Code Playgroud)
有一个函数需要接收类型的参数:
def f(arg: RequestHeader => Result) = {...}
Run Code Online (Sandbox Code Playgroud)
我希望能够传入
arg': Request[AnyContent] => Result
Run Code Online (Sandbox Code Playgroud)
但是,这会导致编译器抱怨.为什么是这样?
说我有一个方法:
def foo(t: java.lang.reflect.Type) = ???
Run Code Online (Sandbox Code Playgroud)
我想打电话给它(Int, Int).
这样的电话怎么样?我试过了:
foo(typeOf[(Int, Int)])
Run Code Online (Sandbox Code Playgroud)
但它似乎没有工作,因为它返回scala.reflect.runtime.universe.Type而不是java.lang.reflect.Type.
这是我目前的代码:
template<int n>
struct N{
static const int k = (n >= 2) ? (1 + N<n-2>::k) : N<0>::k;
};
template<>
struct N<0>{
static const int k = 0;
};
Run Code Online (Sandbox Code Playgroud)
以下编译:
int main(int, char *[])
{
cout << N<2>::k;
getchar();
}
Run Code Online (Sandbox Code Playgroud)
以下内容无法编译:
int main(int, char *[])
{
cout << N<1>::k;
getchar();
}
Run Code Online (Sandbox Code Playgroud)
编译器是否急切地计算?:运算符的正确分支?如果是这样,我怎么能懒得评价呢?
我将在Scala中编写这个,但它更像是一个函数式编程问题.
我有
def foo(x: A): Option[B]
Run Code Online (Sandbox Code Playgroud)
和
def bar(x:B, y:B): C
Run Code Online (Sandbox Code Playgroud)
执行以下操作的最佳方法是什么:
def compose(x:A, y:A): Option[C]
Run Code Online (Sandbox Code Playgroud)
如果foo(y)的foo(x)为None,则compose(x,y)为None,否则compose(x,y)为bar(foo(x).get,foo(y).get) .我能想到的最好的是:
foo(a).flatMap( aRes => foo(b).map( bRes => bar(a,b)))
Run Code Online (Sandbox Code Playgroud) 这里有一个例子说明为什么大熊猫是一个可怕的 设计的 一起破解库:
import pandas as pd
df = pd.DataFrame()
df['A'] = [1,2,3]
df['B'] = [4,5,6]
print(df)
df1 = df[df.A.apply(lambda x:x == 4)]
df2 = df1[df1.B.apply(lambda x:x == 1)]
print(df2)
Run Code Online (Sandbox Code Playgroud)
这将打印
df
A B
0 1 4
1 2 5
2 3 6
df2
Empty DataFrame
Columns: []
Index: []
Run Code Online (Sandbox Code Playgroud)
注意 how Columns: [],这意味着进一步/选择 ondf2将失败。这是一个大问题,因为这意味着我现在必须在尝试从中进行选择之前始终检查任何表是否为空,这是垃圾行为。
为清楚起见,明智的、深思熟虑的、合理的、未完全破坏的行为是保留列。
任何人都愿意提供一些我可以在数据帧 API 的 hack 集合之上应用的 hack 吗?