"111".gsub(/1?/, "2")
=> "2222"
"111".gsub(/1/, "2")
=> "222"
"111".gsub(/1*/, "2")
=> "22"
"111".gsub(/1+/, "2")
=> "2"
Run Code Online (Sandbox Code Playgroud)
为什么以及如何如上所述?
当我们编写Rails应用程序时,它需要Gemfile为我们定义的所有宝石.
如何制作非Rails应用程序呢?
我知道魔法的前半部分.假设我有:
public class Foo {}
public class static FooExt
{
public static void M(this Foo f) {}
}
Run Code Online (Sandbox Code Playgroud)
当我调用foo.M()编译器时将其更改为FooExt.M(foo).
但继承怎么样?例如:
public class Bar : Foo {}
public class static BarExt
{
public static void M(this Bar b) {}
}
Run Code Online (Sandbox Code Playgroud)
当我调用bar.M()它会打电话FooExt.M()还是BarExt.M()?事实上,我测试了它,答案是BarExt,但为什么呢?wow.M()如果我有另一个Wow : Foo但没有,我会打电话怎么WowExt.M()办?
例如:
val m = Map[Int, Int]()
m + (1, 1) // doesn't work!
m + ((1, 1)) // works!
Run Code Online (Sandbox Code Playgroud)
我知道(1, 1)是一个Tuple2,但那么前者为何不起作用?我可以避免这种古怪的双括号吗?
例如,我有一个
arr = [1,2,3,4]
Run Code Online (Sandbox Code Playgroud)
如果我打电话arr.each,我会访问:
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
但我想要
1 2
2 3
3 4
Run Code Online (Sandbox Code Playgroud)
内置功能有可能吗?如果没有,最佳做法是什么?
另一个问题:如果我想要1 2和3 4?
有一个非常简单的socket服务器实现boost::asio.
tcp::acceptor a(io_service, tcp::endpoint(tcp::v4(), port));
tcp::socket(io_service) sock;
a.accept(sock);
char data[1024];
boost::system::error_code error;
size_t length = sock->read_some(boost::asio::buffer(data), error);
std::cout << "Got: " << data << std::endl;
Run Code Online (Sandbox Code Playgroud)
它的客户端看起来像:
size_t request_length = strlen(request);
boost::asio::write(s, boost::asio::buffer(request, request_length));
Run Code Online (Sandbox Code Playgroud)
(两者都来自官方的例子)
当我发送hello, world!到套接字时,我Got: hello, world!立即得到了.但它的缓冲区有1024个字节.怎么知道什么时候读完?
编辑:
对不起,我的描述很糟糕.我的问题是如何read_some()知道何时应该返回.
当我需要定义自己的Equals方法时,我只会Equals(Object)在我的类中重写.
但是MSDN说:
还建议除了实现Equals(object)之外,任何类还为自己的类型实现Equals(type),以提高性能.
但它怎么能提高性能呢?我只能拨打这两种方法中的一种,不是吗?
该scaladoc的Vector#fill样子:
def fill[A](n: Int)(elem: ? A): Vector[A]
n the number of elements contained in the collection.
elem the element computation
returns A collection that contains the results of n evaluations of elem.
Run Code Online (Sandbox Code Playgroud)
但这就是我调用它的方式:
Vector.fill[Boolean](5)(true)
Run Code Online (Sandbox Code Playgroud)
在哪里elem?这是什么意思?
我写了一个像这样的方法:
def typeOnly[T, S](seq: Seq[S]): Seq[T] = {
seq.flatMap{
case t: T => Some(t)
case _ => None
}
}
Run Code Online (Sandbox Code Playgroud)
我希望以这种方式调用它:
typeOnly[String](List(1, "2", 3, "4"))
Run Code Online (Sandbox Code Playgroud)
它不起作用.我似乎必须指定第二个类型参数S:
typeOnly[String, Any](List(1, "2", 3, "4"))
Run Code Online (Sandbox Code Playgroud)
但为什么?如果不是编译器知道的事实List(1, "2", 3, "4")是Seq[Any]?
在Scala中,我可以这样构建Map:
val map = Map(1 -> "one", 2 -> "two", 3 -> "three")
Run Code Online (Sandbox Code Playgroud)
但是它做了什么?应该评估参数,因此1 -> "one"有一个值.那是什么?
我也注意到这个表达式返回true:
scala> 1 -> "one" == (1, "one")
res1: Boolean = true
Run Code Online (Sandbox Code Playgroud)
那有什么区别?
scala ×4
c# ×2
ruby ×2
boost-asio ×1
bundler ×1
enumerable ×1
gem ×1
generics ×1
inheritance ×1
methods ×1
overriding ×1
regex ×1
sockets ×1
tcp ×1