这两个类的行为不同; 原因似乎与使用private[this]声明而不是a相关private.请问有人解释原因吗?
private:
class Person(
private var _age: Int
) {
if (_age < 0) { _age = 0 }
def age = _age
def age_=(newAge: Int) {
if (newAge > _age) { _age = newAge }
}
}
Run Code Online (Sandbox Code Playgroud)
在REPL中,这表现为我对两个类的期望; 也就是说,age方法获取_age,在构造期间已设置为适当的值:
scala> val person = new Person(-1)
person: Person = Person@200a570f
scala> person.age
res0: Int = 0
Run Code Online (Sandbox Code Playgroud)private[this]:
class Person(
private[this] var _age: Int
) {
if (_age < 0) …Run Code Online (Sandbox Code Playgroud)我想获得Julia中可用的核心数量.目前我正在做以下事情:
using PyCall
@pyimport psutil
nCores = psutil.cpu_count()
Run Code Online (Sandbox Code Playgroud)
这称为Python函数.但是,我想使用一些Julia程序.怎么做到呢?
在考虑了这里的原因后总是明确地导入模块(除了Prelude),我试图遵守这个规范.然而,这有时可能很麻烦.是否有任何工具可以分析工作代码并提供完整的显式导入列表?
在某些语言中,可以编写以下类似的东西:
val some_string =
"""First line.
| Second line, with leading space."""
Run Code Online (Sandbox Code Playgroud)
也就是说,一个多行字符串,其中所有前导空格被移除到一个点,但没有进一步.这可以通过写作在Rust中模仿:
let some_string =
"First line.\n \
Second line, with leading space.";
Run Code Online (Sandbox Code Playgroud)
然而,这失去了更接近实际输出的好处.在Rust中有没有办法写一些类似于伪代码的例子,保留(某些)领先的空白?
真实世界Haskell中的一个练习,ch.24,要求实现严格的包装Control.Concurrent.MVar.我正如本书中所建议的那样,通过使用newtype MVarS包装器确保将evaluate其应用于传递给诸如newMVar和等函数的任何参数putMVar.
现在,要包装的函数之一是mkWeakMVar,其类型是MVar a -> IO () -> IO (Weak (MVar a)).假设我的MVarS构建函数实现严格,我推断,因为mkWeakMVar它足以MVarS代替它的MVars.所以我写了以下内容:
import Control.Concurrent.MVar
import System.Mem.Weak
instance Functor Weak
newtype MVarS a = MVarS (MVar a)
mkWeakMVarS :: MVarS a -> IO () -> IO (Weak (MVarS a))
mkWeakMVarS (MVarS mv) x = (fmap . fmap) MVarS (mkWeakMVar mv x)
Run Code Online (Sandbox Code Playgroud)
这似乎工作,即使GHCI警告说,有没有明确的方法声明fmap为Functor Weak.但这让我很感兴趣.是什么让fmap …
以下代码为类型的量词计算数字树1Quant,类似于函数的类型all和any:
treeOfNumbers :: [(Integer, Integer)]
treeOfNumbers =
[0..] >>= \ row ->
let
inc = [0 .. row]
dec = reverse inc
in
zip dec inc
type Quant = (Integer -> Bool) -> [Integer] -> Bool
check :: Quant -> (Integer, Integer) -> Bool
check q (m,n) =
q (\ d -> d - m > 0) [1 .. domN]
where
domN = m + n
genTree :: Quant -> [(Integer, Integer)]
genTree …Run Code Online (Sandbox Code Playgroud) 我想在列表中的链式元素对上映射函数.考虑清单:
a = [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)
通过使用例如函数f a1 a2 = a1 < a2,我想得到:
[True,True,True,True]
Run Code Online (Sandbox Code Playgroud)
以下似乎总体上起作用:
zipWith f a (tail a)
Run Code Online (Sandbox Code Playgroud)
但是,我发现它有点像hackish.有没有更合适的方式,也许使用折叠?
haskell ×4
conventions ×1
cpu-cores ×1
functor ×1
import ×1
instances ×1
julia ×1
memory-leaks ×1
module ×1
optimization ×1
pretty-print ×1
rust ×1
scala ×1
whitespace ×1