考虑一个返回两个值的函数。 我们可以写: // Using out: string MyFunction(string input, out int count) // Using Tuple class: Tuple<string, int> MyFunction(string input) // Using struct: MyStruct MyFunction(string input) 哪一个是最佳实践,为什么?
无论如何,使下面的代码仍然使用开关,并返回b不是? 谢谢! $var = 0; switch($var) { case NULL : return 'a'; break; default : return 'b'; break; } 使用if语句,当然,你会这样做: $var = 0; if($var === NULL) return 'a'; else return 'b'; 但是对于更复杂的例子来说,这变得冗长了。
在Go中,如果你定义了一个新types,例如: type MyInt int 你不能然后将一个MyInt传递给一个期望int的函数,反之亦然: func test(i MyInt) { //do something with i } func main() { anInt := 0 test(anInt) //doesn't work, int is not of type MyInt } 精细。 但是,为什么同样不适用于function呢? 例如: type MyFunc func(i int) func (m MyFunc) Run(i int) { m(i) } func run(f MyFunc, i int) { f.Run(i) } func main() […]
我正在阅读关于按位运算符的一章,我遇到了1的补码运算符程序,并决定在Visual C ++上运行它。 int main () { unsigned char c = 4, d; d = ~c; printf("%d\n", d); } 它给出了有效的输出: 251 然后,而不是使用d作为variables来保存〜c的值,我决定直接打印〜c的值。 int main () { unsigned char c=4; printf("%d\n", ~c); } 它给出-5的输出。 为什么它不工作?
我是Haskell的新手,面临着我无法理解的“无法构造无限types”的错误。 事实上,除此之外,我还没有find一个很好的解释这个错误甚至意味着什么,所以如果你能超越我的基本问题,解释“无限types”的错误,我真的很感激。 代码如下: intersperse :: a -> [[a]] -> [a] — intersperse '*' ["foo","bar","baz","quux"] — should produce the following: — "foo*bar*baz*quux" — intersperse -99 [ [1,2,3],[4,5,6],[7,8,9]] — should produce the following: — [1,2,3,-99,4,5,6,-99,7,8,9] intersperse _ [] = [] intersperse _ [x] = x intersperse s (x:y:xs) = x:s:y:intersperse s xs 试图将其加载到解释器中的错误如下: Prelude> :load ./chapter.3.ending.real.world.haskell.exercises.hs [1 […]
Haskell维基解释如何使用存在types做了很好的工作,但是我不太理解它背后的理论。 考虑这个存在types的例子: data S = forall a. Show a => S a — (1) 为我们可以转换为String东西定义一个types包装器。 维基提到,我们真正想要定义的是类似的 data S = S (exists a. Show a => a) — (2) 即一个真正的“存在”types – 松散的我认为这是说“数据构造函数S采取任何types的Show实例存在和包装它”。 实际上,你可以写一个GADT,如下所示: data S where — (3) S :: Show a => a -> S 我没有尝试编译,但似乎它应该工作。 对我来说,GADT显然等同于我们想写的代码(2)。 然而,我完全不明白为什么(1)等同于(2)。 为什么把数据构造函数移到外面会把所有的东西变成exists ? 我能想到的最接近的是德摩根的逻辑规律 ,交换否定顺序和量词将存在量词转换为通用量词,反之亦然: ¬(∀x. px) ⇔ […]
如何在GHCi中定义这个函数的等价物(取自learnyouahaskell )? import Data.List numUniques :: (Eq a) => [a] -> Int numUniques = length . nub 如果没有types声明,GHCi接受函数定义,但是最后是一个无用的types: Prelude Data.List> import Data.List Prelude Data.List> let numUniques' = length . nub Prelude Data.List> :t numUniques' numUniques' :: [()] -> Int 结果函数只接受一个单位列表作为参数。 GHCi中有没有提供types声明的方法? 还是有另一种方法来定义这些不需要types声明的函数? 我没有看到GHCi指南中的明显线索,并尝试使用下列expression式(无效): > let numUniques' = ((length . nub) :: (Eq a) => [a] […]
我不明白什么时候使用AnyObject,什么时候在Swift中用户Any。 我的情况,我有一个词典 [string:???] ??? :可以是Int,Double,Float,String,Array,Dictionary 有人可以向我解释Any和AnyObject之间的区别,在我的情况下可以使用一个。 奥洛克
我(试图)学习Objective-C,并不断遇到一个短语,如: -(id) init; 我知道id是一个Objective C语言关键字,但是说“编译器专门用指针types转换规则处理id ”是什么意思呢? id是否自动指定对象作为指针?
我知道int和long (32位和64位数字),但是什么是uint和ulong ?