我正在阅读斯卡拉学校的基础教程 https://twitter.github.io/scala_school/basics.html。
我试图了解这两个定义之间的区别是什么。
另外,如果有人可以在这种情况下解释currying和部分应用。
def multiply(m: Int,n: Int): Int = m * n
和
C:\Users\Samuel>pip install noise
Collecting noise
Using cached noise-1.2.2.tar.gz
Installing collected packages: noise
Running setup.py install for noise
Complete output from command "c:\program files\python 3.5\python.exe" -c "import setuptools, tokenize;__file__='C:\\Users\\Samuel\\AppData\\Local\\Temp\\pip-build-e9dlwpm2\\noise\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record C:\Users\Samuel\AppData\Local\Temp\pip-7tgvnyfe-record\install-record.txt --single-version-externally-managed --compile:
running install
running build
running build_py
creating build
creating build\lib.win-amd64-3.5
creating build\lib.win-amd64-3.5\noise
copying perlin.py -> build\lib.win-amd64-3.5\noise
copying setup.py -> build\lib.win-amd64-3.5\noise
copying shader.py -> build\lib.win-amd64-3.5\noise
copying shader_noise.py -> build\lib.win-amd64-3.5\noise
copying test.py -> build\lib.win-amd64-3.5\noise
copying __init__.py -> build\lib.win-amd64-3.5\noise
running build_ext
building 'noise._simplex' extension
error: Unable to find vcvarsall.bat
----------------------------------------
Command ""c:\program files\python 3.5\python.exe" -c "import setuptools, tokenize;__file__='C:\\Users\\Samuel\\AppData\\Local\\Temp\\pip-build-e9dlwpm2\\noise\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record C:\Users\Samuel\AppData\Local\Temp\pip-7tgvnyfe-record\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in C:\Users\Samuel\AppData\Local\Temp\pip-build-e9dlwpm2\noise
答案 0 :(得分:1)
区别仅在于您实际调用此方法的方式。在 second 情况下,您唯一的选择是同时传递两个参数,例如first
。在Int => Int
情况下,您可以传递一个参数并获取函数val f: Int => Int = multiply(2) _
f(2) // 4
f(3) // 6
f(525) // 1050
,然后使用另一个参数调用它:
implicit val x = 2
def multiply(m: Int)(implicit n: Int): Int = m * n
multiply(5) //10
curried方法的真正强大之处在于第二个参数是隐含的,因此您不必明确地传递它。
OBJECT_LIBRARY = {'A': A(), 'B': B(), 'C': C()}