小编use*_*757的帖子

Perl使用子调用作为另一个子意外上下文的参数

我使用子调用作为另一个子的参数.示例代码:

test(isInString(), 'second parameter', 'third parameter');

sub test {
    my ($boolean, $second, $third) = @_;
    print "boolean: $boolean\n second: $second\n third: $third\n";
}

sub isInString {
    my $searchFor = 'a'; 
    my $searchIn = 'bcd';   

    return ($searchFor && $searchIn && ($searchIn =~ $searchFor));
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我希望"isInString"中的return语句计算为false(''或undef或者perl中可能存在的任何东西),这将作为参数#1传递给"Test",如你所知d基本上有

Test(undef, 'second parameter', 'third parameter');
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.isInString返回一个空数组,基本上你得到的是

Test('second parameter', 'third parameter');
Run Code Online (Sandbox Code Playgroud)

从perl调试器中的isInString返回给出:

列表上下文从main :: isInString返回:空数组

我假设这是一个perl上下文的东西,我可以先分配一个标量变量,它工作正常:

my $bool = isInString();
Test($bool, 'second parameter', 'third parameter');
Run Code Online (Sandbox Code Playgroud)

调试器给出 - 从main :: isInString返回标量上下文:''

编辑我删除所有parens相同的结果:

sub isInString {
        my $searchFor …
Run Code Online (Sandbox Code Playgroud)

perl compiler-errors

5
推荐指数
2
解决办法
280
查看次数

抽象工厂模式 - 具体工厂点

这是我通常看到显示的抽象工厂模式的方式:

public abstract class Factory 
{ 
    public abstract Product GetProduct(); 
}

public class ConcreteFactory1 : Factory 
{ 
    public override Product GetProduct() {  return new Product1();  } 
}

class ConcreteFactory2 : Factory 
{
    public override Product GetProduct() { return new Product2(); } 
}

interface Product 
{ 
    void SomeMethod(); 
}

class Product1 : Product 
{ 
    public void SomeMethod() { Console.WriteLine("1"); } 
} 

class Product2 : Product 
{ 
    public void SomeMethod() { Console.WriteLine("2"); } 
}

class Program
{
    static void Main(string[] args)
    { …
Run Code Online (Sandbox Code Playgroud)

c# factory abstract factory-pattern

5
推荐指数
1
解决办法
1966
查看次数

gulp main-bower-files正则表达式过滤器不起作用

为什么第二个数组bowerFiles不会过滤到javascript文件.

var gulp = require('gulp');
var mainBowerFiles = require('main-bower-files');

gulp.task('default', function () {

  var unfiltered = mainBowerFiles(); 
  console.log('unfiltered files:', unfiltered); // 11 FILES

  //var jsRegEx = /js$/i; // tried this way too...
  var jsRegEx = new RegExp('js$', 'i');
  var bowerFiles = mainBowerFiles(jsRegEx);
  console.log('bower files:', bowerFiles); // 11 FILES

});
Run Code Online (Sandbox Code Playgroud)

我试图模仿什么亭子,主文件是做在这里,和它的作品.

javascript regex node.js bower gulp

5
推荐指数
1
解决办法
4784
查看次数

Microsoft.Owin.Security.OAuth UserInfo 端点

我正在使用 Microsoft.Owin.Security.OAuth 实现 OAuth 服务器。

我使用 OAuthAuthorizationServerOptions 来设置 AuthorizeEndpointPath 和 TokenEndpointPath。看起来 UserInfoEndpointPath 没有选项。

OAuthV2 规范确实模糊地讨论了这个端点——

本规范未定义资源所有者配置文件信息 API。假设其他 API(例如 SCIM API [ID.ietf-scim-api] 或 OpenID Connect [OpenID.Core] UserInfo Endpoint)可用于此目的。

那么,有没有办法利用 OAuthAuthorizationServerProvider 来提供这个端点?我是否必须创建一个单独的 MVC 控制器端点?或者,还有更好的方法?

oauth owin openid-connect

5
推荐指数
0
解决办法
528
查看次数

TypeScript 和 ES 模块 - 我还需要 rollup/webpack 吗?

我有一个旧的 TypeScript Web 应用程序,它通过 HTML 页面上的脚本包含引用所有内容,因此所有内容都在全局命名空间中声明。TypeScript 代码使用 TypeScript 的模块 -

myclass.ts:

module MyModule {
  export class MyClass {
 }
}
Run Code Online (Sandbox Code Playgroud)

其他文件.ts

let myInstance = new MyModule.MyClass(); // globally available
Run Code Online (Sandbox Code Playgroud)

所有 TypeScript 都使用 tsconfig.json 中的“outFile”写入单个文件,这可能会对全局变量和写入顺序产生问题。

我使用 Visual Studio,它内置了 TypeScript 支持。当您构建解决方案时,它会构建 TypeScript。

我想更新代码以使用现代 ES6 模块:

myclass.ts:

export class MyClass {
}
Run Code Online (Sandbox Code Playgroud)

其他文件.ts

import { MyClass } from "./myclass";
let myInstance = new MyClass(); 
Run Code Online (Sandbox Code Playgroud)

我最初以为我需要使用第三方库(例如 webpack 或 rollup)来完成这项工作,但是查看 TypeScript 编译器生成的 JavaScript,看起来应该可以继续使用“outFile” - 一切都已包装在模块中,因此不应全局可用:

Object.defineProperty(exports, "__esModule", { value: true });
var MyClass = /** …
Run Code Online (Sandbox Code Playgroud)

visual-studio typescript ecmascript-6 webpack rollupjs

5
推荐指数
0
解决办法
1811
查看次数

Redux vs自定义钩子

我同时学习了React和Redux,并全力投入Redux。基本上所有状态都存储在Redux中。我跟着标准allIdsbyId状态形状图案为这里详述

我的应用程序非常以数据为中心,它与API通讯,并且执行许多CRUD类型的操作-fetchAll,fetchById,添加,更新,删除。

API通信被隔离到一个“服务层”模块中,该模块是其自己的npm软件包。对该服务层的所有调用都在redux操作中,使用redux-thunk

我已经意识到不需要将所有内容都放在Redux中,例如,确实需要在特定组件上使用数据。我想简化这种架构。

因此,我开始重构为自定义钩子。似乎因为我的状态形状更多是对象而不是标量,所以我应该使用useReducer而不是useState...

// reducer
// ------------------------- 
const initialState = {
  adding: false,
  updating: false,
  deleting: false,
  error: null,
  items: null
};
const reducer = (state, action) => {
// implementation omitted for brevity. . .
}
const useItemsApi = () => {
  const [state, dispatch] = useReducer(reducer, initialState);

  // wrapped in useCallback because called in component's useEffect
  const fetchItems = useCallback(async …
Run Code Online (Sandbox Code Playgroud)

javascript architecture reactjs redux react-redux

5
推荐指数
1
解决办法
171
查看次数

使用 react-query 和 react-router-dom 缓存

我正在尝试react-query并希望看到它缓存。我有一个页面可以获取书籍列表。

请注意,为了简洁起见,一些代码显然被遗漏了,只是为了展示重要的部分。

const useBooks = options => {
  return useQuery(['books', options], bookApi.fetchBooks(options));
}

const Books = () => {
  useEffect(() => () => console.log("unmount"), []);
  const [options, setOptions] = useState({}); // options ex: { page: 1, search: "test"}
  const {error, isLoading, data} = useBooks(options);

  return books.map(book => <div>{book.name}</div>;
}
Run Code Online (Sandbox Code Playgroud)

现在这本书是我的应用程序中使用react-router-dom的“页面” :

const App = () => {

  return (
    <Router>
      <>
        <Route exact path="/">
          <Home />
        </Route>
        <Route path="/books">
          <Books />
         </Route>
      </>
     </Router>
    )
  } …
Run Code Online (Sandbox Code Playgroud)

reactjs react-router react-router-dom react-query

5
推荐指数
1
解决办法
611
查看次数

反应查询获取旧数据

我有一个母版页,它是一个项目列表,还有一个详细信息页面,我可以在其中获取并更新一个项目。我有以下基于 react-query 库的钩子:

const useItems = (options) => useQuery(["item"], api.fetchItems(options)); // used by master page
const useItem = id => useQuery(["item", id], () => api.fetchItem(id)); // used by details page
const useUpdateItem = () => {
  const queryClient = useQueryClient();
  return useMutation(item => api.updateItem(item), {
    onSuccess: ({id}) => {
     queryClient.invalidateQueries(["item"]);
     queryClient.invalidateQueries(["item", id]);
   }
  });
};
Run Code Online (Sandbox Code Playgroud)

UpdatePage 组件有一个表单组件,它接受一个 defaultValue 并将其加载到它的本地“草稿”状态 - 所以在这方面它有点“不受控制”,我不提升草稿状态。

// UpdatePage

const query = useItem(id);
const mutation = useUpdateItem();

return (
  {query.isSuccess && 
   !query.isLoading && 
   <ItemForm defaultValue={query.data} onSubmit={mutation.mutate} …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-query

5
推荐指数
1
解决办法
1511
查看次数

Perl - 将空字符串用作false是一种好习惯吗?

在布尔比较中,在Perl中使用空字符串作为false是安全/良好的做法吗?

例如:

my $s = '';

if($s) {
 print 'true';
} else {
 print 'false';
}
Run Code Online (Sandbox Code Playgroud)

或者长度函数是更好的方法:

my $s = '';

if(length($s) > 0) {
 print 'true';
} else {
 print 'false';
}
Run Code Online (Sandbox Code Playgroud)

string perl

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

带有HTML.ActionLink的ASP.NET MVC Razor三元

我试图回答这个问题:

如何在剃刀中使用三元运算符(特别是在HTML属性上)?

使用Html.ActionLink; 这样的事情:

@(ViewData["page"] == "Page1" ? "Page1" : Html.ActionLink("Page 1", "Page1", "Index"))
Run Code Online (Sandbox Code Playgroud)

这可能吗?

ternary-operator razor asp.net-mvc-3

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