标签: implicit

为什么传递给函数的所有数据都是“显式传递”的?

数据“显式”传递给函数,而方法“隐式传递”给调用它的对象。

请您解释一下这两种传递数据的方式之间的区别吗?java 或 c# 中的示例会有所帮助。

methods function implicit argument-passing

4
推荐指数
1
解决办法
1846
查看次数

C++ 如何防止编译器在调用函数时进行隐式转换?

这是交易:

当我有一个带有像这样的默认参数的函数时

int foo (int a, int*b, bool c = true);
Run Code Online (Sandbox Code Playgroud)

如果我错误地这样称呼它:

foo (1, false);
Run Code Online (Sandbox Code Playgroud)

编译器会将 false 转换为 int 指针并调用 b 指向 0 的函数。

我见过人们建议使用模板方法来防止隐式类型转换:

template <class T>
int foo<int> (int a, T* b, bool c = true);
Run Code Online (Sandbox Code Playgroud)

但这种方法太混乱并且使代码变得混乱。

有显式关键字,但它仅适用于构造函数。

我想要的是一种与显式方法类似的干净方法,这样当我声明该方法时,如下所示:

(keyword that locks in the types of parameters) int foo (int a, int*b, bool c = true);
Run Code Online (Sandbox Code Playgroud)

并这样称呼它:

foo (1, false);
Run Code Online (Sandbox Code Playgroud)

编译器会给我这个:

foo (1, false);
         ^
ERROR: Wrong type in function call (expected int* but got bool)
Run Code Online (Sandbox Code Playgroud)

有这样的方法吗?

c++ casting default explicit implicit

4
推荐指数
1
解决办法
1291
查看次数

隐微分符号

我一直在用 sympy 做导数,我不知道在语法上会如何写。我尝试查找它,但没有一个解决方案有意义。例如,如果我试图x**5 + y**2 + z**4 = 8xyz通过计算来区分,我该怎么做?z 是一个符号,还是一个像正则导数那样的函数?谢谢你。

python implicit sympy differentiation python-3.x

4
推荐指数
1
解决办法
2346
查看次数

Scala:如何访问`Numeric` 类型的算术运算?

class Foo[T](t: T)(implicit int: Numeric[T]) {
  val negated = -t
  val doubled = t + t
  val squared = t * t
  // ...
}
Run Code Online (Sandbox Code Playgroud)

我在这里的所有三行上都有红色波浪线。是什么赋予了?

scala numeric implicit

4
推荐指数
1
解决办法
599
查看次数

如何在 Scala 中用另一种方法包装具有隐式的方法?

我有一个隐含的方法:

def f(x: String)(implicit dispatcher: ExecutionContextExecutor, mat: ActorMaterializer) = ???
Run Code Online (Sandbox Code Playgroud)

我想创建一个辅助方法,如:

def g1(y: String) = f("uri1" + y)
def g2(y: String) = f("uri2" + y)
Run Code Online (Sandbox Code Playgroud)

当然,no implicits found for parameter ex: ExecutionContext对于方法,这不能编译g

我不想implicitsg.
那么,这个案例的惯用解决方案是什么?

scala implicit

4
推荐指数
1
解决办法
148
查看次数

需要两个隐式参数之一的 Scala 方法

如果我可以创建具有类似想法的方法,我很感兴趣:

def myMethod[T](param: T)(implicit oneOf: Either[TypeClass1[T], TypeClass2[T]]) = oneOf match ...
Run Code Online (Sandbox Code Playgroud)

我尝试使用默认参数(我在 akka 中看到过类似的东西):

def myMethod[T](param: T)(implicit t1: TypeClass1[T] = null, t2: TypeClass2[T] = null) = 
  if (t1 == null) ...
Run Code Online (Sandbox Code Playgroud)

但是,这样我就不能强制 Scala 编译器至少找到其中之一。

此外,我已经实现了从TypeClass1[T]toLeft[TypeClass1[T], TypeClass2[T]]和 from TC2to 的隐式转换Right,但是 Scala 编译器忽略了这种转换。

有没有办法做这样的事情?

scala implicit

4
推荐指数
2
解决办法
115
查看次数

为什么导入类型类实例不再需要 import cats.implicits._ ?

在 Cats 2.1.x 中,类型类实例被引入范围内import cats.implicits._

scala> import cats.Show
import cats.Show

scala> Show[Int].show(42)
<console>:13: error: could not find implicit value for parameter instance: cats.Show[Int]
       Show[Int].show(42)
           ^

scala> import cats.implicits._
import cats.implicits._

scala> Show[Int].show(42)
res1: String = 42
Run Code Online (Sandbox Code Playgroud)

然而在 Cats 2.2.0中,它无需import cats.implicits._例如

scala> import cats.Show
import cats.Show

scala> Show[Int].show(42)
val res0: String = 42
Run Code Online (Sandbox Code Playgroud)

发生了什么变化以及从现在开始我们应该如何使用导入?

import scala implicit typeclass scala-cats

4
推荐指数
1
解决办法
1543
查看次数

为什么更喜欢隐式 val 而不是隐式对象

当询问有关隐式的问题时,与答案(或有时这就是答案本身)一起给出的常见建议/推荐/建议是implicit vals显式类型签名一起使用,而不是使用implicit objects

但是,这背后的原因是什么?

design-patterns scala implicit

4
推荐指数
1
解决办法
211
查看次数

scala 中的“隐式”现在已弃用还是至少不再需要了?

检查 fs2 教程,我偶然发现了以下代码

def client[F[_]: MonadCancelThrow: Console: Network]: F[Unit] =
  Network[F].client(SocketAddress(host"localhost", port"5555")).use { socket =>
    socket.write(Chunk.array("Hello, world!".getBytes)) >>
      socket.read(8192).flatMap { response =>
        Console[F].println(s"Response: $response")
      }
  }
Run Code Online (Sandbox Code Playgroud)

在哪里

Network[F].client
Run Code Online (Sandbox Code Playgroud)

感觉很奇怪,因为我通常不会写

implictly[Network[F]].client
Run Code Online (Sandbox Code Playgroud)

所以我检查了代码并且它可以工作和编译,所以它一定是隐式不再需要了。我想知道从什么时候开始?它会被弃用吗?有人可以分享 scala 发行说明的链接或说明这一点的东西吗?

scala implicit typeclass fs2

4
推荐指数
2
解决办法
111
查看次数

如何检查类型之间是否存在隐式转换?

我需要检查类型之间是否存在隐式转换.对于内置类型,我可以创建一个字典,其中包含相应可用类型的类型和列表.但是对于自定义类型,这是不可能的,因为我不知道将检查哪些代码.有没有通用的方法来做到这一点?

谢谢.

c# casting implicit

3
推荐指数
1
解决办法
1417
查看次数