我正在学习Lua,并且遇到了匿名函数的概念.这很有趣,但我想知道它提供了什么额外的优势,而非匿名功能.
所以,如果我有类似的东西
function(a,b) return (a+b) end
Run Code Online (Sandbox Code Playgroud)
该功能是匿名的,如果我有
function add(a,b) return (a+b) end
Run Code Online (Sandbox Code Playgroud)
该功能不是匿名的.第二个更好,因为我可以在任何我想要的地方调用它,我也知道我的功能在做什么.那么匿名函数的优势是什么?我在这里错过了什么吗?
我首先问过这个关于final在Java 中使用匿名内部类的问题:
为什么我们使用带有匿名内部类的final关键字?
我实际上正在阅读马丁奥德斯基的Scala书.似乎Scala简化了很多Java代码,但对于Scala闭包,我注意到了一个显着的差异.
在Java中,我们使用匿名内部类"模拟"闭包,捕获最终变量(将被复制到堆上而不是堆栈中),在Scala中我们可以创建一个可以捕获val的闭包,但是也是一个var,因此在闭包调用中更新它!
所以我们可以使用没有final关键字的Java匿名内部类!我还没读完这本书,但是现在我没有找到关于这种语言设计选择的足够信息.
谁能告诉我,为什么马丁Odersky的,谁似乎真的照顾功能的副作用,选择关闭,以便能够同时捕捉val和var,而不是唯一的val?
Java和Scala实现的优点和缺点是什么?
谢谢
我发现匿名函数非常有用,但很多时候我需要使用循环才能使函数正常工作.例如:
while val<tolerance
.....
end
Run Code Online (Sandbox Code Playgroud)
我知道我可以将函数保存在一个单独的文件中,有时我可以对代码进行矢量化,然后匿名函数可以工作,但在某些情况下很难找到for循环的替代方法.
Matlab文档没有讨论它或说它是不可能的.有任何想法吗?
遇到一些在表达式中使用IIFE而不仅仅是普通函数的代码.
var custom_type = (function() {
return $('#myDiv').attr('custom_type');
})();
Run Code Online (Sandbox Code Playgroud)
通常我会写这样的东西:
var custom_type = function() {
return $('#myDiv').attr('custom_type');
};
Run Code Online (Sandbox Code Playgroud)
IIFE的原因是什么?我唯一能想到的是,IIFE可能custom_type只在开始时分配变量一次,而第二次可能会在每次引用变量时继续检查更新的类型.
这有效:
scala> def test(name: String = "joe"): Boolean = true
test: (name: String)Boolean
我希望这可以以同样的方式工作:
scala> val test: String => Boolean = { (name: String = "joe") => true }
<console>:1: error: ')' expected but '=' found.
是否可以在 Matlab 中创建多行匿名函数?
文档中没有合适的例子,也没有直接否认。在网络讨论中,我发现了一些提问者的嘲笑,好像这是愚蠢的愿望。如今,当大多数语言引入具有多行功能的 lambda 表达式时,这看起来很奇怪。
我们知道,可以在R中调用函数而不将它们分配给环境,例如
> (function(x){x/2})(5)
[1] 2.5
Run Code Online (Sandbox Code Playgroud)
我想在mutate_each(或summarise_each)调用中动态使用这些函数.例如,用
df <- data.frame(a = runif(10), b = rnorm(10))
我可能会尝试执行以下操作之一,但它们都会返回错误:
library(dplyr)
> df %>%
+ mutate_each(funs((function(x){x/2})), a, b)
Error in eval(substitute(expr), envir, enclos) :
Unsupported type CLOSXP for column "a"
>
> df %>%
+ mutate_each(list((function(x){x/2})), a, b)
Error: is.fun_list(calls) is not TRUE
>
>
> df %>%
+ mutate_each(funs((function(x){x/2})(.)), a, b)
Error in vapply(dots[missing_names], function(x) make_name(x$expr), character(1)) :
values must be length 1,
but FUN(X[[1]]) result is length 2
> …Run Code Online (Sandbox Code Playgroud) 只需使用带有Java 1.8和Android 7(API Level 24)的Android Studio 2.2.3设置一个项目,试图测试"新的"java 8功能Stream.
这是我的gradle文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.example.radinator.myproject"
minSdkVersion 24
targetSdkVersion 24
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.2.0'
testCompile 'junit:junit:4.12'
}
Run Code Online (Sandbox Code Playgroud)
这里的代码:
import java.util.stream.*;
public class MainActivity extens Activity {
@Override
protected void onCreate(Bundle …Run Code Online (Sandbox Code Playgroud) 在一些PHP测验中,我得到了以下任务 - 我必须进行return true以下操作:
function foo($x)
{
return $x === $x();
}
foo(__________ALLOWED_INPUT____________);
Run Code Online (Sandbox Code Playgroud)
现在我的想法是传递一个自动返回的匿名函数:
foo(function() { return $this_function; })
Run Code Online (Sandbox Code Playgroud)
但是我还没有找到办法做到这一点.有可能吗?
PS:很棒的游戏(https://returntrue.win/?level=6).
我不知道如何将参数传递给 Nuxt 3 中的匿名函数。
index.vue:
<template>
<form @submit.prevent="signUpNewsletter()">
<input type="email" placeholder="example@x.com" v-model="userEmail">
<input type="submit" value="Submit">
</form>
</template>
<script setup>
const userEmail = ref('x@x.de')
function signUpNewsletter () {
useAsyncData(
'newsletter',
() => $fetch('/api/sign_up_news', {
method: 'POST', // Post method works
body: {
email: userEmail.value
}
})
)
}
</script>
Run Code Online (Sandbox Code Playgroud)
server/api/sign_up_news.js:
import { createClient } from '@supabase/supabase-js'
export default async (email) => { // can't read the parameter
const SUPABASE_KEY = 'key123'
const SUPABASE_URL = 'url.supabase.co'
const supabase = createClient(SUPABASE_URL, SUPABASE_KEY)
const …Run Code Online (Sandbox Code Playgroud)